无法从后面的代码加载 FormView 上的 DropDownList?

2023-12-09

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

Like so:

<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 的数据绑定机制,这当然会尝试将 DropDownList 绑定到底层数据源,导致 **'ParentMetricCode' 具有无效的 SelectedValue,因为它不存在于列表中项目。 “参数名称:值...”错误,因为 DropDownList 尚未填充。

我尝试在 FormView 的 DataBinding() 事件中执行加载,但随后:

theListcontrol = CType(formView.FindControl(listControlName), System.Web.UI.WebControls.ListControl)

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

这不可能吗? (我不想使用辅助 ObjectDataSource 来绑定下拉列表)


实施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").

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从后面的代码加载 FormView 上的 DropDownList? 的相关文章

  • .NET 进程分配的内存何时释放回 Windows

    设置 NET 在启动时以及在收集后尝试满足分配请求时 分段为每一代的堆 0 1 2 LOH 分配内存 以获得连续的内存块 为每个堆分配的内存可能会随着应用程序 预热 而趋于平稳 但第 2 代和大型对象堆可能除外 在垃圾收集期间 每个堆 0
  • WCF 版本控制枚举

    我开始编写一些需要向前兼容和版本控制的 WCF 数据协定 我一直在阅读 MSDN 文章here http msdn microsoft com en us library ms733832 aspx 并且想知道是否有人对有关枚举的第 14
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • 以编程方式创建类似 Visio 的图表 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要以编程方式创建类似于 Visio 的图表作为绘图 大多数情况下 我们将创建与此类似的网络布局图o
  • 用于动态视图数据/表单的 ASP.Net MVC 编辑器模板

    我正在实现一个 MVC3 Razor Web 应用程序 该应用程序检索用户可以从其他服务编辑的一些 字段 因此要在视图中编辑的属性列表是完全动态的并且在编译时未知 我编写了一些部分视图和 HTML 帮助程序 它们循环从其他服务检索到的组和属
  • 字节数组到 Excel 工作簿

    我正在尝试将字节数组转换为 Excel 工作簿 当我这样做时 Response BinaryWrite renderedBytes 它工作正常并且文件符合预期 但是当我尝试用我在网上找到的这个来做到这一点时 private Object B
  • 使用 Noda 时间将奥尔森时区 ID 转换为 Windows 标准格式

    Olson 和 Windows 时间 ID 之间的转换已在 SO 上出现过多次 很多人推荐乔恩 斯基特 Jon Skeet 的野田时间 http code google com p noda time 为了这个任务 虽然 Google 代码
  • 在 ControlTemplate.Triggers 中使用 TemplateBinding

    为什么下面的 XAML 会给我一个 XamlParseException 并显示 无意义的 消息 表达式类型不是有效的样式值 在运行时
  • 使用.NET代码将系统时间同步到域控制器

    我要运行基于时间的测试 需要在测试期间多次更改系统时间 我希望能够在测试结束时将时间重新同步到域控制器时间 我有任何方法可以使用 NET 代码 C 来做到这一点 我正在使用以下位置的 p invoke 函数更改时间 使用 C 以编程方式设置
  • 在 ASP.NET MVC 3 应用程序中设置 ashx 处理程序的自动化规则

    我正在 MVC 3 应用程序中实现 javascript 文件上传功能 因此我需要使用 Http 处理程序 ashx 来允许大文件上传 现在我需要以某种方式禁止未经身份验证的用户调用处理程序的方法 如果我有一个控制器 我只需对其应用 Aut
  • 设置 Cursor.Position“half”-有效(从一台显示器到另一台)

    我有两个显示器 其中一个是非主显示器 number 1 设置为主要的 number 2 左上角像这样 我再说一遍 number 2是主监视器 这是代码 Cursor Position new Point 500 500 发生的情况是 当光标
  • 我可以安全地删除临时 ASP.Net 文件夹的内容吗?

    每当我运行时 我的应用程序都可以正常工作VS 2010 当我将其上传到服务器并运行时IIS它给编译器错误 CS0433 c Windows Microsoft NET Framework v4 0 30319 Temporary ASP N
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • 托管 ODP.NET 驱动程序未显示在“数据源”对话框中

    在我的计算机上安装托管 ODP NET 后 ODP NET 托管驱动程序没有出现在里面选择数据源Visual Studio 2013 Professional 中的对话框 它应该是这样的 这就是它在我的机器上的实际外观 我已按照 轻松驱动
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • 缺少 ASP.NET 5 模板

    我正在遵循此设置教程 https docs asp net en latest tutorials your first aspnet application html create a new asp net 5 project http

随机推荐