Как отключить выпадающий список в ASP.NET?

Как отключить DropDownList в ASP.NET?

Код:

<asp:TemplateField HeaderText="Effective Total Hours"> 
<ItemTemplate> 
    <%# Eval("TotalHoursEffect")%> 
</ItemTemplate> 
<EditItemTemplate> 
    <asp:DropDownList ID="ddlEditTotalHoursEffect" AppendDataBoundItems="true" 
     DataSourceID="dsTHMsql" DataValueField="Minutes" Enabled="false" 
     ReadOnly="true" DataTextField="Display" 
     SelectedValue='<%# Eval("TotalHoursEffect") %>' runat="server"> 
        <asp:ListItem Selected="True" Value="">(Choose Minutes)</asp:ListItem>
    </asp:DropDownList> 
</EditItemTemplate> 
</asp:TemplateField>

Это не работает для меня. Что я делаю неправильно?

Ответы

Ответ 1

Не существует свойства readonly для верного dropdownlist для веб-форм asp.net.

        <asp:DropDownList ID="DropDownList1" runat="server" Enabled="False">
    </asp:DropDownList>

Если это не то, что вы делаете, вам нужно быть более конкретным. Вы не задавали вопрос, вы не объяснили, ЧТО не работает, или говорите, если вы используете веб-формы или winforms, или если они находятся в коде позади или на странице aspx.

ETA: удалить свойство readonly из выпадающего списка, оно неверно. ПОСЛЕ того, как вы проверите эту часть и посмотрите, исправила ли она ее, если она все еще не делает то, что вы хотите, сообщите нам, что она не делает. Разве это не отключает? Разве это не привязка данных? Что с ним происходит?

О, и убедитесь, что вы используете Bind, а не Eval, для редактирования шаблонов, если значение передается каким-либо образом, например, для обновления запроса. Иногда платформа делает это за кулисами, поэтому, вообще говоря, просто используйте Bind.

Еще одно редактирование: это работает для меня в самом основном смысле в том, что он связывается, и выпадающее меню не выбирается.

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"
        DataSourceID="sqldsProducts" AutoGenerateEditButton="True">
        <Columns>
            <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" />
            <asp:TemplateField HeaderText="CategoryID" InsertVisible="False" SortExpression="CategoryID">
                <EditItemTemplate>
                    <asp:DropDownList Enabled="false" ID="ddlCategory" runat="server" DataSourceID="sqldsCategories"
                        DataTextField="CategoryName" DataValueField="CategoryID" SelectedValue='<%# Bind("CategoryID") %>' AppendDataBoundItems="True">
                        <asp:ListItem Selected="True" Value="" Text="-- choose one --" />
                    </asp:DropDownList>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblCategory" runat="server" Text='<%# Bind("ProductID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
        </Columns>
    </asp:GridView>

Ответ 2

Вы можете отключить раскрывающийся список, но вам нужно будет сделать это из кода.

Попробуйте это в своем .cs(предположим, что ваш asp: DropDownList как id ddlCategory),

ddlCategory.Attributes.Add("disabled", "disabled");

Ответ 3

Предполагая, что отключив, вы имеете в виду "сделать так, чтобы пользователь не мог выбрать элемент из списка", тогда следующие примеры приводят к тому же html (который работает для меня):

Способ 1:

<asp:DropDownList ID="dd" Enabled="false" runat="server">...

Способ 2:

<asp:DropDownList ID="dd" disabled="disabled" runat="server">...

Способ 3 (aspx):

<asp:DropDownList ID="dd" runat="server">...

Способ 3 (aspx.cs):

dd.Enabled = false;

Способ 4 (aspx):

<asp:DropDownList ID="dd" runat="server">...

Способ 4 (aspx.cs):

dd.Attributes.Add("disabled", "disabled")

Результат HTML:

<select name="dd" id="dd" disabled="disabled">...

Ответ 4

var rmu_minutes = 0;

var initRmuChangeHandlers = function() {

    $(".container select").change(function(e) {
        var x = 0;
        var dropDowns = $(".container select");
        dropDowns.each(function() {
            var ddl = this;
            x += parseInt(ddl.value);
            if (!dayOffRmuValidator(x)) {
                alert("4 Hours MAX");
                ddl.selectedIndex = 0;
            }
        });
        rmu_minutes = x;
        updateTotalRmu();

    });
}

var initClearRmuDropDowns = function() {

    var dropDowns = $(".container select");
    dropDowns.each(function() {
        var ddl = this;
        ddl.selectedIndex = 0;
    });
}

var dayOffRmuValidator = function(rmu_minutes) {
    var _MAXMINUTES = 240;

    var ddl = $get('ctl00_ContentPlaceHolder1_DetailsView1_ddlEditType');
    var ddlVal = parseInt(ddl.options[ddl.selectedIndex].value);

    if (ddlVal == RequestTypes["Day Off"])
        return rmu_minutes <= _MAXMINUTES;

    return true;
}


var badRmuHours = function() {
    alert("You are only allowed to make up 4 hours total for a day off");
    var ddlTotal = $("#ctl00_ContentPlaceHolder1_DetailsView1_ddlEditTotalHoursEffect")[0];
    ddlTotal.selectedIndex = 0;
}

Ответ 5

Это то, что я делаю:

ddlEditTotalHoursEffect.Enabled = ложь;

Я могу сделать из вашего кода.

Ой, подождите, вы включили равным false. Что ты собираешься делать, тогда? Вы хотите включить окно ввода данных, но не выпадающее меню?