webForumDet fria alternativet

dropdown (som vanligt)

5 svar · 338 visningar · startad av P

PMedlem sedan jan. 20012 204 inlägg
#1

Har 6 st dropdown, vill kolla så att de inte innehåller samma värde. Hur skiver man bäst? Detta vill inte funka:

 If (dd1.SelectedItem.Value <> dd2.SelectedItem.Value <> ddl3.SelectedItem.Value <> ddl4.SelectedItem.Value <> ddl5.SelectedItem.Value) Then
DinoMedlem sedan sep. 20011 914 inlägg
#2

Nedan är ett alternativ, blir ju förstås en del kontroller.

'block 1
<asp:DropDownList ID="ddl1" Runat="server">
   <asp:ListItem text="One"/>
   <asp:ListItem text="Two"/>
   <asp:ListItem text="Three"/>
   <asp:ListItem text="Four"/>
</asp:DropDownList>
<asp:CompareValidator ID="Comparevalidator1"  ControlToValidate="ddl1" ControlToCompare="ddl2" ErrorMessage="2" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator2"  ControlToValidate="ddl1" ControlToCompare="ddl3" ErrorMessage="3" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator3"  ControlToValidate="ddl1" ControlToCompare="ddl4" ErrorMessage="4" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator4"  ControlToValidate="ddl1" ControlToCompare="ddl5" ErrorMessage="5" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator5"  ControlToValidate="ddl1" ControlToCompare="ddl6" ErrorMessage="6" Operator="NotEqual" Runat="server"/>

'block2
<asp:DropDownList ID="ddl2" Runat="server">
   <asp:ListItem text="One"/>
   <asp:ListItem text="Two"/>
   <asp:ListItem text="Three"/>
   <asp:ListItem text="Four"/>
</asp:DropDownList>
<asp:CompareValidator ID="Comparevalidator6"  ControlToValidate="ddl2" ControlToCompare="ddl1" ErrorMessage="1" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator7"  ControlToValidate="ddl2" ControlToCompare="ddl3" ErrorMessage="3" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator8"  ControlToValidate="ddl2" ControlToCompare="ddl4" ErrorMessage="4" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator9"  ControlToValidate="ddl2" ControlToCompare="ddl5" ErrorMessage="5" Operator="NotEqual" Runat="server"/>
<asp:CompareValidator ID="Comparevalidator10"  ControlToValidate="ddl2" ControlToCompare="ddl6" ErrorMessage="6" Operator="NotEqual" Runat="server"/>

'sen ytterliggare 4 block
PMedlem sedan jan. 20012 204 inlägg
#3

Ohh massa kontroller! Ingen som har något exempel med:

for each dropdown in page.controls
loopa genom alla etc

GladhMedlem sedan maj 20012 812 inlägg
#4

Jag hade nog tatt och skapat mig en hashtable och använd dropdownlistans värde som nyckel och sedan satt in ett fiktivt värde i hashtablen.

Du får nämligen inte har 2 likadana nycklar i en hashtabel, då får du ett fel. typ något sånt här:

HashTable myTable = new HashTable();

try{
 myTable.Add(ddl1.SelectedItem.value,true);
 myTable.Add(ddl2.SelectedItem.value,true);
 myTable.Add(ddl3.SelectedItem.value,true);
 myTable.Add(ddl4.SelectedItem.value,true);
 myTable.Add(ddl5.SelectedItem.value,true);
 myTable.Add(ddl6.SelectedItem.value,true);
}catch(Exception e){
 //-- två eller flerar dropdowlistar har samma värde... FEL
}

Något sånt, läs på om HashTable så får du mer info.

- Magnus

PMedlem sedan jan. 20012 204 inlägg
#5

Tack! Fungerar prima!

PMedlem sedan jan. 20012 204 inlägg
#6

En lösning i c#

string[] values = new string[6];

bool hasError = false;

for (int i=1; i<=6; i++)

{

     DropDownList ddl = (DropDownList) Page.FindControl("dd" + i.ToString());

     string value = ddl.SelectedItem.Value;

     if (Array.IndexOf(values, value) == -1) values[i-1]= value;

     else

     {

         hasError = true;

         break;

     }

}

if (hasError)

{

    // do stuff

}
136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)