实施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();
}
When 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
将加载所有值并设置为在模拟对象中设置的正确选定值。
不知道我还能做些什么来证明它更好......我认为你错过了数据绑定的实际工作原理。如果您尝试这样做FormView
级别,直到FormView
实际上是绑定的。当绑定发生时,您可以通过实现它来触发模板中的每个控件来执行某些操作OnDataBinding
事件。此时,绑定对象的当前迭代及其值可用,这就是您看到我的代码执行的操作的地方Eval("ID")
.