gpt4 book ai didi

asp.net - 无法从后面的代码加载 FormView 上的 DropDownList?

转载 作者:行者123 更新时间:2023-12-05 00:07:02 24 4
gpt4 key购买 nike

我有一个 UserControl,包含一个 FormView,包含一个 DropDownList。
FormView 绑定(bind)到数据控件。

像这样:

<asp:FormView ID="frmEdit" DataKeyNames="MetricCode" runat="server" DefaultMode="Edit" DataSourceID="llbDataSource" Cellpadding="0" >
<EditItemTemplate>
<asp:DropDownList ID="ParentMetricCode" runat="server" SelectedValue='<%# Bind("ParentMetricCode") %>' />
</EditItemTemplate>
<asp:FormView>

我正在尝试从代码隐藏中填充 DropDownList。如果这不包含在 FormView 中,我通常会在 Page_Load 事件中执行此操作。但是,这在 FormView 中不起作用,只要我尝试这样做,访问代码中的下拉列表,即:
theListcontrol = CType(formView.FindControl(listControlName), ListControl)  

...调用了FormView的数据绑定(bind)机制,当然,它试图将DropDownList绑定(bind)到底层数据源,导致**'ParentMetricCode'有一个无效的SelectedValue,因为它不存在于列表中项目。 “参数名称:值 ...”错误,因为 DropDownList 尚未填充。

我尝试在 FormView 的 DataBinding() 事件中执行加载,但随后:
theListcontrol = CType(formView.FindControl(listControlName), System.Web.UI.WebControls.ListControl)

...失败,因为此时 FormView.Controls.Count = 0。

这是不可能的吗? (我不想使用辅助 ObjectDataSource 将下拉列表绑定(bind)到)

最佳答案

实现 OnDataBinding直接在您的 DropDownList 上.

当您将表单 View 绑定(bind)到某些数据时,OnDataBinding对于DropDownList会开火。此时,您可以将所需的值加载到列表中,并将选定的值也绑定(bind)到加载的列表中。

这是一个例子:

<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 加载列表数据,来自数据库或您可能想要缓存它的东西,因为每一“行”数据都会导致列表数据的加载。

编辑:
既然你认为这是不可能的,我写了一个快速演示应用程序来证明它是如何工作的:

在您的 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实际上是绑定(bind)的。当绑定(bind)发生时,您可以通过实现 OnDataBinding 来触发模板中的每个控件执行某些操作。事件。此时,绑定(bind)对象的当前迭代及其值是可用的,这就是您看到我的代码执行 Eval("ID") 的地方.

关于asp.net - 无法从后面的代码加载 FormView 上的 DropDownList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2435185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com