C# 使用SqlDataSource时,向DropDownList项添加除值以外的属性

C# 使用SqlDataSource时,向DropDownList项添加除值以外的属性,c#,asp.net,C#,Asp.net,我有一个绑定到SqlDataSource的DropDownList,如下所示: <asp:DropDownList ID="ddlist" AppendDataBoundItems="True" DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="value" AutoPostBack="True" runat="server"> <asp:ListItem></asp:Lis

我有一个绑定到SqlDataSource的DropDownList,如下所示:

<asp:DropDownList ID="ddlist" AppendDataBoundItems="True" DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="value" AutoPostBack="True" runat="server">
    <asp:ListItem></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:myConnectionString %>" SelectCommand="SELECT [name], [value] FROM [myTable]" runat="server"></asp:SqlDataSource>

我假设我需要在代码隐藏文件中以编程方式执行此操作,但我不清楚是否仍要将SqlDataSource绑定到DropDownList,或者是否应该使用SqlReader打开连接并迭代结果,并“手动”更新DropDownList或者其他更优雅的解决方案。

请尝试以下解决方案:

  • 添加
    DropDownList
    SqlDataSource
    标记为(请注意,我在select语句中添加了
    OnDataBound=“ddlist_DataBound”
    和第三列)


  • 我已经在一个应用程序中进行了测试,效果很好。

    我独立地找到了相同的解决方案,因此您的回答让我更加相信这是一条可行的道路。我发现;但是,运行代码隐藏方法onDataBound会导致该属性无法在回发中存活。相反,我使用了onPreRender,以便在每次回发时都添加属性。
    <select>
        <option></option>
        <option value="1" data-default="1">Line 1</option>
        <option value="2" data-default="0">Line 2</option>
    </select>
    
    <asp:DropDownList ID="ddlist" AppendDataBoundItems="True" OnDataBound="ddlist_DataBound"
      DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="value"
      AutoPostBack="True" runat="server">
        <asp:ListItem></asp:ListItem>
    </asp:DropDownList>
    
    <asp:SqlDataSource ID="SqlDataSource1" ConnectionString=
       "<%$ ConnectionStrings:myConnectionString %>" SelectCommand="SELECT [name], [value],
       [DefaultBit] FROM [myTable]" runat="server">
    </asp:SqlDataSource>
    
    protected void ddlist_DataBound(object sender, EventArgs e) {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataView dv = (System.Data.DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
        dt = dv.ToTable();
    
        foreach (System.Data.DataRow row in dt.Rows) {
            ddlist.Items.FindByValue(row[1].ToString()).Attributes.Add("data-default", row[2].ToString());
        }
    }