webForumDet fria alternativet

Bestämma SELECTED i DropDownList

.NET

18 svar · 545 visningar · startad av edebro

Medlem sedan aug. 2001261 inlägg
Frågan#1

Detta är en rätt vanlig företeelse så det måste nästan finnas en smidig lösning i .NET.

Jag har ett värde i en databas, och vill sätta en ListItem till selected="true", om värdet i databasen är detsamma som ListItems värde.

Pseudokod (vbscript/asp) hur jag menar;
<option value="lala" <% If objRS("DbColumn") = "lala" Then Response.Write("selected") %>>
osv...

Hur gör jag detta på smidigast sätt i ASP.NET?

Har lite tidspress så jag är grymt tacksam för snabba svar! ;) :birp

Medlem sedan okt. 20005 273 inlägg
#2

C# lösning
ddlimage är min selectlist

[red]
ddlimage.DataBind(); 
i = 0;
isfound = false;
while( i < ddlimage.Items.Count && isfound == false)
{
	li = ddlimage.Items[i];
	if(li.Value == [b]"ditt värde"[/b])
	{
		ddlimage.SelectedIndex = i;
		isfound = true;
	}
	i++;
}
[/red]

mv icaaq

Medlem sedan aug. 2001261 inlägg
#3

Tack som fan, snabbt och bra svar!
Det fungerar skitbra

Medlem sedan juni 20019 024 inlägg
#4

Det är betydligt lättare att använda den inbyggda metoden FindByValue för att markera rätt alternativ:

ddlCategory.Items.FindByValue("blaha").Selected = True

Under förutsättning att dropdownlistan finns och är fylld förstås. Annars får du först instansiera Items-objektet och kontrollera att det finns/är fyllt och därefter köra FindByValue & Selected.

Medlem sedan okt. 20005 273 inlägg
#5

Pace skrev:

Det är betydligt lättare att använda den inbyggda metoden FindByValue för att markera rätt alternativ:

ddlCategory.Items.FindByValue("blaha").Selected = True

Under förutsättning att dropdownlistan finns och är fylld förstås. Annars får du först instansiera Items-objektet och kontrollera att det finns/är fyllt och därefter köra FindByValue & Selected.

du har så rätt så.....det finns ju även FindByText

mv icaaq

Medlem sedan nov. 2003569 inlägg
#6

Men varför inte göra på det enklaste sättet?, om han nu ska selecta med ett Value.

dropdownlist.SelectedValue="22";

SelectedValue har ju både Get och Set. ;)

Medlem sedan juni 20019 024 inlägg
#7

Nöff skrev:

dropdownlist.SelectedValue="22";

SelectedValue har ju både Get och Set. ;)

Ännu enklare!

Medlem sedan apr. 20012 266 inlägg
#8

Pace skrev:

Nöff skrev:

dropdownlist.SelectedValue="22";

SelectedValue har ju både Get och Set. ;)

Ännu enklare!

Under vissa förutsättningar i och för sig, har man ett index fält i databasen som matchar dropdownlisten är det kannon att göra på detta sätt, annars rätt värdelöst :)

red: självklart är det SelectedIndex jag menar och inte SelectedValue :)

Medlem sedan maj 20012 812 inlägg
#9

Men varför inte göra på det enklaste sättet?, om han nu ska selecta med ett Value.

dropdownlist.SelectedValue="22";

SelectedValue har ju både Get och Set.

Nu har jag inte VS.NET installerat på denna dator, så jag kan inte kolla din kod. Men är du säker på att du letar upp den item som har värdet 22 och sätter den posten som markerad.

om jag tolkar koden rätt ihuvudet, så tar du posten som är markerad och ändrar dess värde till 22, det är inte riktigt samma sak :)

Under förutsättning att dropdownlistan finns och är fylld förstås. Annars får du först instansiera Items-objektet och kontrollera att det finns/är fyllt och därefter köra FindByValue & Selected.

Spelar ingen roll vilken method man använder så måste man kontrollera om dropdownlistan finns. Eftersom alla kan ge detta fel. Du behöver dock inte instansiera några items objekt, eftersom detta objekt instansieras när dropdownlistan skapas, så finns inte värdet med så får man bara null tillbaka, vilket gör att exemplet inte är så jättelyckat, eftersom det kan ge run-time fel. (du kan ju inte få propertien "selected" på ett null objekt"

Däremot så kan man lägga FindByValue/FindByText i en if-sats och kolla om objectet blir null eller ett objekt, blir det ett objekt så sätter man det objektet till selekted.

Enkelt, snabbt och säkert.

- Magnus

Medlem sedan nov. 2003569 inlägg
#10

om jag tolkar koden rätt ihuvudet, så tar du posten som är markerad och ändrar dess värde till 22, det är inte riktigt samma sak

Nepps ;)

The SelectedValue property can also be used to select an item in the list control by setting it with the value of the item. If no items in the list control contain the specified value, a System.ArgumentOutOfRangeException is thrown.

Jag använder den på min applikation med dropdownlistor. för att selecta sparade svar.

Men det är under förutsättning att man har .net 1.1, SelectedValue finns inte i .net 1.0 (men vem har 1.0 nuförtiden)

Medlem sedan aug. 2001261 inlägg
#11

Nöff: Den lösningen var ju helt klart smidigare. Jag hade hoppats att det hade funnits nåt sånt i .NET.
Tackar!

Medlem sedan dec. 20003 563 inlägg
#12

Det finns alltid förbättringar från gamla ASP. ;)
Tips! Såfort du kommer på en "smart" lösning med switchar "<% %>": Ta bort - Gör om - Gör rätt :)

Medlem sedan maj 20012 812 inlägg
#13

The SelectedValue property can also be used to select an item in the list control by setting it with the value of the item. If no items in the list control contain the specified value, a System.ArgumentOutOfRangeException is thrown.

Där ser man, man lär sig något nytt varje dag, riktigt smidig lösning, förutom möjligheten till runtime fel, men gör man som du så har man ju oftast en item med value 22, så då är det smart.

- Magnus

Medlem sedan juni 20019 024 inlägg
#14

Gladh skrev:

Pace skrev:

Under förutsättning att dropdownlistan finns och är fylld förstås. Annars får du först instansiera Items-objektet och kontrollera att det finns/är fyllt och därefter köra FindByValue & Selected.

Spelar ingen roll vilken method man använder så måste man kontrollera om dropdownlistan finns. Eftersom alla kan ge detta fel. Du behöver dock inte instansiera några items objekt, eftersom detta objekt instansieras när dropdownlistan skapas, så finns inte värdet med så får man bara null tillbaka, vilket gör att exemplet inte är så jättelyckat, eftersom det kan ge run-time fel. (du kan ju inte få propertien "selected" på ett null objekt"

Däremot så kan man lägga FindByValue/FindByText i en if-sats och kolla om objectet blir null eller ett objekt, blir det ett objekt så sätter man det objektet till selekted.

Det säger väl sig självt att man inte kan köra metoder på ett fantasiobjekt, men jag menar att man får felmeddelande (vid run-time) om objektet inte är fyllt, dvs ej databundet. Items (som inte behöver instansieras - du har rätt, fel ordval av mig) kan inte retunera några itemcollections (eller vilket objekt det nu representerar) om dropdownlisten inte är fylld och databunden.

Medlem sedan maj 20012 812 inlägg
#15

men jag menar att man får felmeddelande (vid run-time) om objektet inte är fyllt, dvs ej databundet

Nu har jag inte testat så du kanske har rätt, men varför skulle jag få det?

Om jag inte har någon data i min dropdownlista så har jag inga Items objekt, om jag då gör en FindByValue/FindByText så borde den returnerar NULL och inte något felmeddelande?

Jag har ju aldrig testat, men vore otroligt korkat av MS att göra en Exception då, eftersom man ändå får tillbaka NULL om valuet/texten inte finns.

- Magnus

Medlem sedan apr. 20012 266 inlägg
#16

Man får null och sedan när man försöker t.ex sätta .Selected = true får man ett NullReferenceException.

Medlem sedan juni 20019 024 inlägg
#17

renholm skrev:

Man får null och sedan när man försöker t.ex sätta .Selected = true får man ett NullReferenceException.

Precis, det är det jag menar.

Medlem sedan maj 20012 812 inlägg
#18

Varför läser ni inte vad jag har skrivit så fall :(

eftersom detta objekt instansieras när dropdownlistan skapas, så finns inte värdet med så får man bara null tillbaka, vilket gör att exemplet inte är så jättelyckat, eftersom det kan ge run-time fel. (du kan ju inte få propertien "selected" på ett null objekt"

Men det betyder inte att du får ett exception om du gör en FindByValue() när dropdownlistan är tom.

Alltså gör man så jag tidigare skrivit:

Däremot så kan man lägga FindByValue/FindByText i en if-sats och kolla om objectet blir null eller ett objekt, blir det ett objekt så sätter man det objektet till selekted.

- Magnus

Medlem sedan juni 20019 024 inlägg
#19

Jo, och det är precis det jag menar.
Läs om det jag skrev så ska du se att vi snackar om samma sak, bara att vi "snackar om" varandra. ;)

Jag skrev:

kontrollera att det finns/är fyllt och därefter köra FindByValue & Selected.

För att kontrollera värdet måste man ju göra en If-sats. ;)

265 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)