Реализация OnDataBinding
прямо на вашем DropDownList
.
Когда вы связываете свой вид формы с некоторыми данными, OnDataBinding
для DropDownList
срабатывает. Теперь вы можете загрузить нужные значения в список и привязать выбранное значение к загруженному списку.
Вот пример:
<asp:DropDownList ID="ParentMetricCode" runat="server" OnDataBinding="ParentMetricCode_DataBinding" />
Затем реализуйте OnDataBinding:
protected void ParentMetricCode_DataBinding(object sender, System.EventArgs e)
{
DropDownList ddl = (DropDownList)(sender);
// Fill the list items however you want
ddl.Items.Add(new ListItem("1", "1"));
ddl.Items.Add(new ListItem("2", "2"));
// etc...
// Set the selected value
ddl.SelectedValue = Eval("ParentMetricCode").ToString();
}
Когда DataBind
ваш FormView, все начнет творить чудеса:)
Также, если вы загружаете данные списка для вашего DropDownList
из БД или чего-то еще, возможно, вы захотите их кэшировать, поскольку каждая «строка» данных будет вызывать загрузку данных списка.
EDIT:
Поскольку вы думаете, что это невозможно, я написал небольшое демонстрационное приложение, чтобы доказать, как оно работает:
В вашем aspx файле включите это:
<asp:FormView ID="fvTest" runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlTest" runat="server" OnDataBinding="ddlTest_DataBinding"></asp:DropDownList>
</ItemTemplate>
</asp:FormView>
Тогда в вашем .cs файле:
public class MockData
{
public string ID { get; set; }
public string Text { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
List<MockData> lst = new List<MockData>();
lst.Add(new MockData() { ID = "3", Text = "Test3" });
fvTest.DataSource = lst;
fvTest.DataBind();
}
protected void ddlTest_DataBinding(object sender, System.EventArgs e)
{
DropDownList ddl = (DropDownList)(sender);
ddl.Items.Add("1");
ddl.Items.Add("2");
ddl.Items.Add("3");
ddl.Items.Add("4");
ddl.Items.Add("5");
ddl.SelectedValue = Eval("ID").ToString();
}
Запустите код ... DropDownList
будет загружен со всеми значениями и будет установлен на правильное выбранное значение, которое было установлено в макете объекта.
Не уверен, что еще я могу сделать, чтобы доказать это лучше ... Я думаю, вы упустили, как на самом деле работает DataBinding. Если вы попытаетесь сделать это на уровне FormView
, элементы управления не будут выполнены, пока FormView
не будет привязан. Когда привязка происходит, вы можете запустить каждый элемент управления в шаблоне, чтобы сделать что-то, реализовав его OnDataBinding
событие. На этом этапе текущая итерация связанного объекта и его значений доступна, и именно здесь вы видите, что мой код выполняет Eval("ID")
.