[.NET]兩個ListBox,左右搬移選項 part2

  • 4804
  • 0

[.NET]兩個ListBox,左右搬移選項 part2

補充上一篇發現的問題,謝謝91哥幫忙指點,試著做出可以達到需要效果的寫法,只是不知道寫得好不好…

一樣先拉出兩個ListBox

image

 

ASPX

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListBox-2.aspx.cs" Inherits="Practics_ListBox_2" Debug="true" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml">
   6:  <head id="Head1" runat="server">
   7:      <title></title>
   8:      <style type="text/css">
   9:          .style1
  10:          {
  11:              width: 211px;
  12:          }
  13:          .style2
  14:          {
  15:              width: 25px;
  16:          }
  17:      </style>
  18:  </head>
  19:  <body>
  20:      <form id="form1" runat="server">
  21:      <div>
  22:      
  23:          <table id="Table1" style="width:100%; height: 100%;" >
  24:          <tr>
  25:          <td class="style1">
  26:              <asp:ListBox ID="lbHR_EDU_TYPE" runat="server" Height="160px" Width="200px" 
  27:                  SelectionMode="Multiple" style="margin-right: 19px">
  28:              </asp:ListBox>
  29:              </td>
  30:          <td class="style2">
  31:                 <br />
  32:                      <asp:ImageButton ID="ImageButton2Right" runat="server" 
  33:                          ImageUrl="~/Images/icon-ffwd.gif" onclick="ImageButton2Right_Click" />
  34:                      <br />
  35:                      <asp:ImageButton ID="ImageButton2Left" runat="server" 
  36:                          ImageUrl="~/Images/icon-frew.gif" onclick="ImageButton2Left_Click" />
  37:   
  38:          </td>
  39:          <td>
  40:              <asp:ListBox ID="lbHR_FOURKINDS" runat="server" Height="160px" Width="200px" 
  41:                  SelectionMode="Multiple">
  42:              </asp:ListBox>
  43:              </td>
  44:          </tr>
  45:          </table>
  46:                              <asp:SqlDataSource ID="ds_HR_EDU_TYPE" runat="server" 
  47:                          ConnectionString="<%$ ConnectionStrings:Chilin_AppConnectionString %>" 
  48:                          ProviderName="<%$ ConnectionStrings:Chilin_AppConnectionString.ProviderName %>" SelectCommand="SELECT COD_ID,COD_VAL,COD_ID_VAL,CMP_SERIL_NO
  49:   FROM fnCODE('HR_EDU_TYPE')
  50:  WHERE CMP_SERIL_NO='A001'"></asp:SqlDataSource>
  51:   
  52:                                         <asp:SqlDataSource ID="ds_HR_FOURKINDS" runat="server" 
  53:                          ConnectionString="<%$ ConnectionStrings:Chilin_AppConnectionString %>" SelectCommand="SELECT COD_ID,COD_VAL,COD_ID_VAL,CMP_SERIL_NO 
  54:  FROM fnCODE('HR_FOURKINDS')
  55:  WHERE CMP_SERIL_NO='A001'"></asp:SqlDataSource>
  56:   
  57:   
  58:      
  59:      </div>
  60:      </form>
  61:  </body>
  62:  </html>
  63:   

C#

   1:  protected void Page_Load(object sender, EventArgs e)
   2:      {
   3:          if (!IsPostBack)
   4:          {
   5:              lbHR_EDU_TYPE.DataSourceID = "ds_HR_EDU_TYPE";
   6:              lbHR_EDU_TYPE.DataTextField = "COD_ID_VAL";
   7:              lbHR_EDU_TYPE.DataValueField = "COD_ID";
   8:   
   9:              lbHR_FOURKINDS.DataSourceID = "ds_HR_FOURKINDS";
  10:              lbHR_FOURKINDS.DataTextField = "COD_ID_VAL";
  11:              lbHR_FOURKINDS.DataValueField = "COD_ID";
  12:          }
  13:          else
  14:          {
  15:              lbHR_FOURKINDS.DataSourceID = null;
  16:              lbHR_EDU_TYPE.DataSourceID = null;
  17:          }
  18:      }
  19:   
  20:      protected void ImageButton2Right_Click(object sender, ImageClickEventArgs e)
  21:      {
  22:          DataTable table = MakeDataTable();
  23:   
  24:          if (lbHR_EDU_TYPE.Items.Count > 0)
  25:          {
  26:              for (int i = 0; i < lbHR_EDU_TYPE.Items.Count; i++)
  27:              {
  28:                  if (lbHR_EDU_TYPE.Items[i].Selected)
  29:                  {
  30:                      lbHR_FOURKINDS.Items.Add(lbHR_EDU_TYPE.Items[i].Text);
  31:                  }
  32:                  else
  33:                  {
  34:                      DataRow row;
  35:                      row = table.NewRow();
  36:                      row["COD_ID"] = lbHR_EDU_TYPE.Items[i].Value;
  37:                      row["COD_ID_VAL"] = lbHR_EDU_TYPE.Items[i].Text;
  38:                      table.Rows.Add(row);
  39:                  }
  40:              }
  41:          }
  42:          else
  43:          {
  44:              Response.Write("</br>已無項目可移除!");
  45:          }
  46:   
  47:          lbHR_EDU_TYPE.Items.Clear();
  48:          lbHR_EDU_TYPE.DataSource = table;
  49:          lbHR_EDU_TYPE.DataBind();
  50:   
  51:      }
  52:      protected void ImageButton2Left_Click(object sender, ImageClickEventArgs e)
  53:      {
  54:          DataTable table = MakeDataTable();
  55:   
  56:          if (lbHR_FOURKINDS.Items.Count > 0)
  57:          {
  58:              for (int i = 0; i < lbHR_FOURKINDS.Items.Count; i++)
  59:              {
  60:                  if (lbHR_FOURKINDS.Items[i].Selected)
  61:                  {
  62:                      lbHR_EDU_TYPE.Items.Add(lbHR_FOURKINDS.Items[i].Text);
  63:                  }
  64:                  else
  65:                  {
  66:                      DataRow row;
  67:                      row = table.NewRow();
  68:                      row["COD_ID"] = lbHR_FOURKINDS.Items[i].Value;
  69:                      row["COD_ID_VAL"] = lbHR_FOURKINDS.Items[i].Text;
  70:                      table.Rows.Add(row);
  71:                  }
  72:              }
  73:          }
  74:          else
  75:          {
  76:              Response.Write("</br>已無項目可移除!");
  77:          }
  78:          lbHR_FOURKINDS.Items.Clear();
  79:          lbHR_FOURKINDS.DataSource = table;
  80:          lbHR_FOURKINDS.DataBind();
  81:      }
  82:   
  83:      protected DataTable MakeDataTable()
  84:      {
  85:          DataTable table = new DataTable("CodeTable");
  86:          DataColumn column;
  87:          column = new DataColumn();
  88:          column.ColumnName = "COD_ID";
  89:          table.Columns.Add(column);
  90:          column = new DataColumn();
  91:          column.ColumnName = "COD_ID_VAL";
  92:          table.Columns.Add(column);
  93:   
  94:          return table;
  95:      }

 

另外記錄一下實作過程中遇到的問題:

1、要先將原本指定的DataSourceID拿掉,不然會發生同時指定DataSourceID跟DataSource的問題。

2、指定完DataSource之後還需做DataBind的動作,不然移兩次之後,被移動的ListBox就會全部被清空。