[.NET]兩個ListBox,左右搬移選項 part2
補充上一篇發現的問題,謝謝91哥幫忙指點,試著做出可以達到需要效果的寫法,只是不知道寫得好不好…
一樣先拉出兩個ListBox
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就會全部被清空。