Das klingt, als ob Sie an der falschen Veranstaltung arbeiten. Versuchen Sie SelectedIndexChanged .
Stellen Sie sicher, dass Sie auch die AutoPostBack
Eigenschaft eingestellt auf True
.
Aufgelöst
OK, ich habe also nachgeforscht, weil ich neugierig war :)
Es gibt ein "Problem" bei der Datenbindung mit nicht eindeutigen Werten.
Deshalb entschuldige ich mich öffentlich dafür, dass ich etwas anderes gesagt habe.
Zum Reproduzieren:
ASPX
<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="True">
</asp:DropDownList>
<asp:Label ID="lblSelItem" runat="server"Text="Currently Selected Item: 0"></asp:Label>
<asp:Label ID="lblSelVal" runat="server" Text="Currently Selected Value: X"></asp:Label>
Code-Behind
List<string> MyData()
{
List<string> rtn = new List<string>();
rtn.Add("I am the same value!");
rtn.Add("I am the same value!");
rtn.Add("I am the same value!");
rtn.Add("I am the same value!2");
return rtn;
}
protected void Page_Init()
{
if (!Page.IsPostBack)
{
// Load the Data for the DDL.
myDDL.DataSource = MyData();
myDDL.DataBind();
}
}
protected void Page_Load(object sender, EventArgs e)
{
// Display the Currently Selected Item/Value.
lblSelItem.Text = "Currently Selected Item: " + myDDL.SelectedIndex.ToString();
lblSelVal.Text = "Currently Selected Value: " + myDDL.SelectedValue;
}
Ausführen und dabei die Werte in der DropDownList ändern. Beachten Sie, dass ein PostBack nicht erfolgt.
Als ich mir den Quelltext ansah, wurde mir klar, dass wir den "" explizit setzen müssen. value
" Attribut für die <option>
Elemente, die von der Server-Steuerung erzeugt werden, was mich dazu brachte, etwas wie folgt zu tun:
Neuer Code-Behind
Dictionary<string, string> MyTwoColData()
{
Dictionary<string, string> rtn = new Dictionary<string, string>();
rtn.Add("1", "I am the same value!");
rtn.Add("2", "I am the same value!");
rtn.Add("3", "I am the same value!");
return rtn;
}
protected void Page_Init()
{
if (!Page.IsPostBack)
{
// Load the Data for the DDL.
Dictionary<string, string> data = MyTwoColData();
foreach (KeyValuePair<string, string> pair in MyTwoColData())
{
myDDL.Items.Add(new ListItem(pair.Value, pair.Key));
}
myDDL.DataBind();
}
}
Dadurch werden die Werte explizit auf "1", "2", "3" usw. gesetzt, so dass sie eindeutig sind, aber dennoch die richtigen Daten in der Liste angezeigt werden.
Natürlich können Sie dies ändern, um mit einspaltigen Listen zu arbeiten, aber einfach durch eine for-Schleife laufen und den Wert von i
oder so ähnlich.
Was gute Workarounds mit DataSets angeht, bin ich mir nicht sicher.
Würden wir dem Benutzer realistischerweise eine Liste von Optionen mit genau denselben Werten präsentieren?
Ich persönlich glaube nicht, und das ist wahrscheinlich der Grund, warum dieses "Problem" nicht angegangen wurde :)
Viel Spaß!
PS:
Oh, ich sollte noch hinzufügen, wenn Sie den Textwert in der "Korrektur" verwenden wollen, ändern Sie ihn in SelectedItem
statt SelectedValue
.