使用 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();
}
沒有留言:
張貼留言