Comment désactiver une DropDownList
dans 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>
Cela ne fonctionne pas pour moi. Qu'est-ce que je fais mal?
Il n'y a pas de propriété readonly pour une vraie liste déroulante pour les formulaires Web asp.net.
<asp:DropDownList ID="DropDownList1" runat="server" Enabled="False">
</asp:DropDownList>
Si ce n'est pas ce que vous faites, vous devrez être beaucoup plus spécifique. Vous n'avez pas posé de question, vous n'avez pas expliqué QUOI ne fonctionnait pas, ni précisé si vous utilisiez des formulaires Web ou winforms, ou si cela se trouvait dans le code situé derrière ou sur la page aspx.
ETA: supprimez la propriété readonly de la liste déroulante, elle n'est pas valide. APRÈS avoir testé cette partie et vu si elle la corrigeait, si elle ne fait toujours pas ce que vous voulez, dites-nous ce qu'elle ne fait pas. N'est-ce pas désactiver? N'est-ce pas une liaison de données? Qu'est-ce qui se passe avec ça?
Oh, et assurez-vous que vous utilisez Bind, et non Eval, pour modifier des modèles si la valeur est transmise de quelque manière que ce soit, par exemple à une mise à jour de requête. Parfois, la plate-forme le fait en coulisse, donc en règle générale, utilisez simplement Bind.
Encore une édition: cela fonctionne pour moi dans le sens le plus fondamental, dans la mesure où il se lie et que la liste déroulante ne peut pas être sélectionnée.
<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>
Vous pouvez désactiver une liste déroulante, mais vous devrez le faire à partir du code précédent.
Essayez ceci dans votre .cs (en supposant que votre asp: DropDownList en tant qu’id de ddlCategory),
ddlCategory.Attributes.Add("disabled", "disabled");
En supposant que par désactiver, vous voulez dire "faites en sorte que l'utilisateur ne puisse pas sélectionner un élément de la liste", les exemples suivants donnent tous le même code HTML (ce qui me convient):
Méthode 1:
<asp:DropDownList ID="dd" Enabled="false" runat="server">...
Méthode 2:
<asp:DropDownList ID="dd" disabled="disabled" runat="server">...
Méthode 3 (aspx):
<asp:DropDownList ID="dd" runat="server">...
Méthode 3 (aspx.cs):
dd.Enabled = false;
Méthode 4 (aspx):
<asp:DropDownList ID="dd" runat="server">...
Méthode 4 (aspx.cs):
dd.Attributes.Add("disabled", "disabled")
HTML résultant:
<select name="dd" id="dd" disabled="disabled">...
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;
}
C'est ce que je fais:
ddlEditTotalHoursEffect.Enabled = false;
Je peux être fait à partir de votre code-behind.
Oh, attends, tu as activé égal à faux. Que cherches-tu à faire alors? Voulez-vous activer la zone de saisie des données, mais pas le menu déroulant?