Похоже, вы работаете над неправильным событием. Попробуйте SelectedIndexChanged .
Убедитесь, что для свойства AutoPostBack
установлено значение True
.
Решено
ОК, так что я начал копаться в этом, потому что мне было любопытно:)
При связывании данных с неуникальными значениями возникает «проблема».
Итак, во-первых, я публично извиняюсь за то, что сказал иначе.
Для копирования:
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;
}
Выполнить, изменив значения в DropDownList. Обратите внимание, что PostBack не происходит.
Глядя на Источник, я понял, что нам нужно явно установить атрибут "value
" для элементов <option>
, сгенерированных серверным элементом управления, что заставило меня сделать что-то вроде:
Новый код позади
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();
}
}
Это явно устанавливает значения в «1», «2», «3» и т. Д., Делая их уникальными, в то же время отображая правильные данные в списке.
Очевидно, вы можете изменить это, чтобы работать со списками из одного столбца, но просто проходить через цикл for и использовать значение i
или что-то еще.
Что касается хороших обходных путей с DataSets, не уверен.
Реально, мы бы представили пользователю список параметров с точно такими же значениями?
Лично я так не думаю, поэтому, вероятно, эта «проблема» не решена:)
Наслаждайтесь!
PS:
О, я должен также добавить, если вы хотите использовать текстовое значение в "fix", тогда измените его на SelectedItem
вместо SelectedValue
.