2

我在数据绑定的 FormView 中有一个 TabContainer(按类别显示信息,例如:客户生物数据、健康历史、财务细节......)。formView 的更新和插入不起作用(将 NULL 值发布到数据库) - 我猜 FormView 在选项卡容器的选项卡面板内找不到文本框。

一些论坛说这是因为 TabContainer 的“INamingContainer”实现(通过设计),一个 hack 是控制 TabContainer 的源代码(ajax ctl 工具包的源代码)并从中删除“INamingContainer”接口。 ..对我来说太复杂了..我有点迷路了。

那么有没有直接更好的方法来解决这个问题?我很高兴看到该工具包未能实现这一基本功能,因为对于大多数开发人员订购信息(选项卡控件)来说,使用 formview 是一种常见需求。

提前致谢, Jeewai

4

1 回答 1

2

回答我自己的帖子......我从 asp.net 论坛得到了一些很棒的内容,并决定在这里发布解决方案:复制帮助我的解释:

希望这将为可能遇到相同问题的其他用户解决一些问题。

最好的,JY

Blockquote 嗨,JY,

简短的回答是,在编译 Bind 语句时,为插入/更新提取值存在一些限制。如果 FormView 中的控件在另一个命名容器中(TabContainer 和 TabPanel 都是命名容器),那么编译器无法解析如何从 TextBox 中提取值。我在我的博客http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method-Dissected.aspx对此有更详细的讨论。

为了解决这个问题,您需要手动提取值,例如:

protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) { // 获取对控件 TextBox 的引用 LastNameTextBox= FormView1.FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LastNameTextBox") as TextBox;

// Set update parameters in datasource
ObjectDataSource1.UpdateParameters["LastName"].DefaultValue = LastNameTextBox.Text;

}

由于 FindControl 仅搜索当前命名容器,因此您需要深入挖掘每个命名容器(FormView、TabContainer 和 TabPanel)才能找到 TextBox。

希望有帮助。

亚伦

块引用

于 2009-06-11T19:17:46.123 回答