2009-09-04 14 views
31

Mam listę rozwijaną, która ma kilka opcji generowania raportów. Na podstawie rodzaju konta użytkownik ma określone opcje, które powinny być widoczne, ale nie można ich wybrać (jako zachętę do ich uaktualnienia).sprawiają, że pozycja listy rozwijanej nie jest zaznaczalna

Zastanawiałem się, czy ktoś wiedział, jak to osiągnąć.

Uprawnienia już istnieją. Potrzebuję tylko pomocy, aby niektóre elementy nie były zaznaczone.

każda pomoc byłaby bardzo ceniona.

Shawn

Odpowiedz

53

Nie jesteś pewien, czy wciąż szukasz odpowiedzi na to pytanie?

Mark Redman's answer jest świetny, jeśli można zdefiniować listę wyboru na stronie aspx, jednak jeśli wiążemy listę rozwijaną dynamicznie oczywiście nie można.

miałem sukces przy użyciu następujących do osiągnięcia rezultatu jesteś po (nie wiem na pełne wsparcie przeglądarki, ale działa w nowszych wersjach IE)

foreach (ListItem item in dropdownlist.Items) 
{ 
    if ([item should be disabled condition]) 
    { 
     item.Attributes.Add("disabled", "disabled"); 
    } 
} 

To renderować elementy niepełnosprawnych wyszarzone.

+0

Dodaję sugerowany kod do zdarzenia "Page_Load', ale element' ListItem' (Select), który chcę wyłączyć, nadal nie jest wyszarzony. Każdy pomysł, dlaczego? –

+0

Czy wyłącza element? Jeśli tak, to czy style też wymagają korekty? –

+2

Należy dodać kod do obsługi zdarzeń zarządzania databinding dla kontrolki listy rozwijanej. –

2

Można używać walidatora wymagane pola i ustawić właściwość wartości początkowej do wartości pozycji na liście rozwijanej nie ma wyboru.

<asp:RequiredFieldValidator ID="RequiredFieldValidator" runat="server" 
         ErrorMessage="" ControlToValidate="DropDown" InitialValue="Unselectable Item"></asp:RequiredFieldValidator> 
0

Można wykonać tę stronę po stronie klienta za pomocą procedury obsługi wyzwalanej po wybraniu elementu. Następnie odznacz element i/lub wyświetl komunikat błędu.

16

Można wyłączyć znacznik <option> w html <select>

Patrz: http://www.htmlref.com/reference/appa/tag_option.htm

w ASP.NET:

<asp:DropDownList ID="MyDropDownList" runat="server"> 
     <asp:ListItem Text="Standard Report" Value="SR"></asp:ListItem> 
     <asp:ListItem Text="Enterprise Report" Value="ER" disabled="disabled"></asp:ListItem> 
    </asp:DropDownList> 
+0

Jak to zrobić w ASP.NET ? –

+0

Nie musiałem pisać kodu! :-) –

-3

Spróbuj

myDropDownList.Items.FindByValue("ReportValue").Enabled = false; 

Spowoduje to wyłączenie pozycja z listy przez zasadniczo nie pokazując go na liście.

"ReportValue" = wartość przedmiotu, który ma zostać wyłączony.

+1

Chce, aby wyłączone elementy były widoczne, ale nie można ich wybrać, więc nie wiesz, czy to zadziała. –

3

Miałem ten sam problem i próbowałem użyć pierwszej opublikowanej odpowiedzi, ale nie zadziałało to dla mnie. Następnie zmieniłem pierwszy wpis na:

foreach (ListItem item in dropdownlist.Items) 
{ 
    if ([item should be disabled contdition]) 
    { 
    item.Enabled = false; 
    } 
} 

i zadziałało dla mnie.

+5

To podejście usuwa element z listy i nie wyłącza go. Więc nie odpowiada na pierwsze pytanie w tym poście. –

-1

Jeśli jest to kontrola HTML, to bardzo łatwo uczynić ją niemożliwą do wybrania. po prostu użyj elementu HTML "optgroup" ". na przykład

<select> 
<optgroup label="Hardware"></optgroup> 
<option id="1">mouse</option> 
<option id="2">keyboard</option> 
<option id="3">monitor</option> 
<optgroup label="Software"></optgroup> 
<option id="Option1">windows XP</option> 
<option id="Option2">MS Office</option> 
<option id="Option3">VStudio</option> 
</select> 

(UWAGA: ta działa zarówno w IE/Firefox)

Thanks Sushil Jinder

+3

Nie jest to czym jest "optgroup". – You

1

Można spróbować to

myDropDownList.Items.FindByValue("ReportValue").Attributes.Add("disabled", "disabled"); 
Powiązane problemy