測試文字功能,小工具,標題

記錄很重要,不然會浪費很多時間在找以前的記憶

一個人的氣度,決定他未來的高度。

2014年3月30日 星期日

ASP.NET DropDownList 補充DataBind會跑2次的改善方法

使用 DataBind() 資料繫結 DropDownList ,手動加入下拉選擇項目方法

AppendDataBoundItems="True" //預設是false




<asp:ListItem Value="">請選擇...</asp:ListItem> // 想要呈現的值跟名稱,Value可以用來判斷是否被選中了,可以從屬性設定,也可以直接加在html編輯頁上



        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
            DataSourceID="SqlDataSource1" DataTextField="department_name"
            DataValueField="department_code" AppendDataBoundItems="True">
            <asp:ListItem Value="0">請選擇.....</asp:ListItem>
        </asp:DropDownList>

補充DataBind會跑2次的改善方法
105年8月補充
發現有2個DropDownList然後是有連動關係的話DropDownList2會跑2次DropDownList2_DataBinding的問題

DropDownList1有設定 AutoPostBack="True"
2個DropDownList都有設定 AppendDataBoundItems="True" 的狀況下

後來測試發現我在網頁部份都是用SqlDataSource來DataBind資料
而我的DropDownList2的SqlDataSource2上有多了這行,
主要是想要DropDownList1選好後變動DropDownList2的資料,
但好像拿掉後,DropDownList2就只會DataBind 一次
<SelectParameters>
                        <asp:ControlParameter ControlID="DropDownList1" Name="system_mid"
                            PropertyName="SelectedValue" Type="Int32" />
                    </SelectParameters>

後來把html這邊的SelectParameters拿掉,在c#這邊加上這些,
後來就不會DataBind二次,也達到我要的動作

 protected void DropDownList1_DataBound(object sender, EventArgs e)
    {
        SqlDataSource2.SelectParameters.Clear();
        SqlDataSource2.SelectCommand = "SELECT * FROM [system_ddl_list] WHERE [system_mid] =" + DropDownList1.SelectedValue;
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
       DropDownList2.Items.Clear() ;    
       DropDownList2.Items.Add("請選擇...");
       SqlDataSource2.SelectParameters.Clear();
       SqlDataSource2.SelectCommand = "SELECT * FROM [system_ddl_list] WHERE [system_mid] =" + DropDownList1.SelectedValue;
       DropDownList2.DataBind();
    }

沒有留言:

張貼留言