如何在动态绑定下拉列表时禁用下拉列表项

本文关键字:下拉列表 动态绑定 | 更新日期: 2023-09-27 18:03:29

下拉列表动态绑定为:

<asp:DropDownList ID="ddlSource" class="ddl" runat="server" DataSourceID="FROM1" DataTextField="CompanyName" DataValueField="CompanyName">
                </asp:DropDownList>
                <asp:SqlDataSource ID="FROM1" runat="server" ConnectionString="<%$ ConnectionStrings:PIMSConnectionString2 %>" SelectCommand="SELECT [CompanyName] FROM Company ORDER BY [CompanyName]"></asp:SqlDataSource>
                <br />

CompanyName表的值等于"选择",我希望这个值在下拉列表中显示,但应该是灰色的(禁用),这样用户就不能选择或设置它。

知道如何在ASP中做到这一点吗?. NET(不是HTML)?

如何在动态绑定下拉列表时禁用下拉列表项

根据评论中的其他问题有完整的答案。

根据CompanyName="Select":

条件将ListItems禁用并置于ddlSource之上

aspx:

<asp:DropDownList ID="ddlSource" class="ddl" runat="server" > </asp:DropDownList>
<asp:SqlDataSource ID="FROM1" runat="server" ConnectionString="<%$ ConnectionStrings:PIMSConnectionString2 %>" SelectCommand=""></asp:SqlDataSource>
<br />

背后代码:

public void PopDDL()
{
    FORM1.SelectCommand = "SELECT CompanyName FROM Company ORDER BY CASE WHEN CompanyName='Select' THEN 0 ELSE 1 END;"
    ddlSource.DataSourceID = "FORM1";
    ddlSource.DataTextField = "CompanyName";
    ddlSource.DataValueField = "CompanyName";
    ddlSource.DataBind();
    foreach (ListItem itm in ddlSource.Items) {
        if (itm.Value == "Select") {
            itm.Attributes.Add("disabled", "disabled");
        }
    }
}
protected void Page_Load(object sender, System.EventArgs e)
{
    PopDDL();
}

试试这个,但是填充ddlSource将从后面的代码(它在vb.net中,抱歉):

     Public Sub PopDDL()
        FORM1.SelectCommand = "SELECT CompanyName FROM Company ORDER BY CompanyName;"
        ddlSource.DataSourceID = "FORM1"
        ddlSource.DataTextField = "CompanyName"
        ddlSource.DataValueField = "CompanyName"
        ddlSource.DataBind()
        For Each itm As ListItem In ddlSource.Items
            If itm.Value = *your_condition* Then  'condition why this item must be disabled
                itm.Attributes.Add("disabled", "disabled")
            End If
        Next
    End Sub
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        PopDDL()
    End Sub

项目将显示但禁用(灰色)。

更新:我使用转换工具(vb.net到c#),我认为这是c#代码:

foreach (ListItem itm in ddlSource.Items) {
    if (itm.Value == *your_contidion*) { 'condition why this item must be disabled
        itm.Attributes.Add("disabled", "disabled");
    }
}

如果您使用itm.Enabled = False,项目将不显示。

UPDATE #2(通过在线转换器转换为c#代码):

aspx page:

    <asp:DropDownList ID="ddlSource" class="ddl" runat="server" > </asp:DropDownList>
   <asp:SqlDataSource ID="FROM1" runat="server" ConnectionString="<%$ ConnectionStrings:PIMSConnectionString2 %>" SelectCommand=""></asp:SqlDataSource>
   <br />

背后代码:

public void PopDDL()
{
    FORM1.SelectCommand = "SELECT CompanyName FROM Company ORDER BY CompanyName;";
    ddlSource.DataSourceID = "FORM1";
    ddlSource.DataTextField = "CompanyName";
    ddlSource.DataValueField = "CompanyName";
    ddlSource.DataBind();
    foreach (ListItem itm in ddlSource.Items) {
        if (itm.Value == *your_condition*) {
            itm.Attributes.Add("disabled", "disabled");
        }
    }
}
protected void Page_Load(object sender, System.EventArgs e)
{
    PopDDL();
}