Laden...

DropDownList.SelectedIndex liefert falschen Wert

Erstellt von Dizzy.w3 vor 13 Jahren Letzter Beitrag vor 13 Jahren 989 Views
Dizzy.w3 Themenstarter:in
82 Beiträge seit 2007
vor 13 Jahren
DropDownList.SelectedIndex liefert falschen Wert

Hi,

ich habe folgende Werte in der DropDownList

I: Text
0: Main A
1:- Sub 1
2: Main B
3: - Sub 1

Waehle ich 3: - Sub 1 bekomme ich als Index den 1. Treffer mit diesem Text, und zwar Sub 1 mit der ID 1.

Eienr eine Idee was da nich passt?

:::

P
120 Beiträge seit 2008
vor 13 Jahren

"den ersten Treffer" ?
Wie genau rufst du denn den SelectedIndex bzw. den Wert der DropDownList ab?
Du kannst den Wert auch mit der Eigenschaft SelectedValue abrufen.

Dizzy.w3 Themenstarter:in
82 Beiträge seit 2007
vor 13 Jahren

Hi,

"den ersten Treffer mit dem Text". Kein PostBack-Problem also.

DropDownList.SelectedIndex - Welche Alternativen dazu gibt's?

:::

458 Beiträge seit 2007
vor 13 Jahren

SelectedValue, wie von Phil_B auch bereits vorgeschlagen.

be the hammer, not the nail!

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo Dizzy.w3,

wenn Du ListItems mit dem selben Text verwenden willst, musst Du zumindest einen eindeutigen Wert für ListItem.Value angeben - sonst können die nicht unterschieden werden.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

P
120 Beiträge seit 2008
vor 13 Jahren

Hallo Dizzy,

Du könntest es mal so versuchen:


DropDownList ddl = new DropDownList();
ddl.Items.Add(new ListItem("I: Text", "I"));
ddl.Items.Add(new ListItem("0: Main A", "0"));
ddl.Items.Add(new ListItem("1:- Sub 1", "1"));
ddl.Items.Add(new ListItem("2: Main B", "2"));
ddl.Items.Add(new ListItem("3: - Sub 1", "3"));

Dann bekommst du nach einem PostBack auch den SelectedIndex + SelectedValue richtig mit.
Wie MarsStein schon geschrieben hat, solltest Du den einzelnen Einträgen eindeutige IDs zuweisen (siehe oben).

Dizzy.w3 Themenstarter:in
82 Beiträge seit 2007
vor 13 Jahren

Danke euch, ich werde es nun so machen, dass ich die ID in den Value als String speicher. Es ist nicht sauber, aber wird sicher funktionieren.

:::

458 Beiträge seit 2007
vor 13 Jahren

Das ist nicht unsauber, das ist die normale Vorgehensweise.

be the hammer, not the nail!

P
120 Beiträge seit 2008
vor 13 Jahren

Was ist daran Deiner Meinung nach "unsauber"?
Die ListItem.Value-Eigenschaft ist => immer ≤ ein String.
Wenn Du öfters mit der DropDownList arbeitest, wirst Du sicher schnell merken, warum das ein String und kein Int32 oder anderer DatenTyp ist.
Wenn man einem Benutzer eine beliebige Auswahl anbieten will, die im Laufe der Zeit erweitert wird, kommt man mit Integern schnell an die Grenze der Unübersichtlichkeit: Es schleichen sich schneller Fehler ein.
Wenn der Value-Wert ein sinnvoll gewählter String ist, steigt man später auch noch durch 😃

5.941 Beiträge seit 2005
vor 13 Jahren

Salute zusammen

Das ist nicht unsauber, das ist die normale Vorgehensweise.

Da stimme ich bei.
Die Benutzung von "value" ist so gedacht. Was für Werte du da reinpackst ist egal.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011