我在数据绑定FormView中有一个TabContainer(按类别显示信息:客户生物数据,健康历史,财务详细信息......)。 formView的更新和插入不起作用(将NULL值发布到数据库) - 我想FormView无法在选项卡容器的选项卡面板中找到TextBox。
有些论坛说这是因为TabContainer的实现(按设计)为“INamingContainer”,而黑客就是控制TabContainer的 源代码(ajax ctl工具包的源代码)并从中删除“INamingContainer”界面......太复杂了我的口味..我有点迷失。
有没有一个直接的,更好的方法来解决这个问题?令我眼花缭乱的是,工具包未能实现这个基本的功能,因为大多数开发人员订购信息(选项卡控件)都是常见的需求。
提前致谢, Jeewai
答案 0 :(得分:2)
回答我自己的帖子......我从asp.net论坛得到了一些很棒的内容,并决定在这里发布解决方案:重现帮助我的解释:
希望能够向可能遇到同样问题的其他用户清除一些问题。
最佳, JY
块引用 嗨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”)为TextBox;
// Set update parameters in datasource
ObjectDataSource1.UpdateParameters["LastName"].DefaultValue = LastNameTextBox.Text;
}
由于FindControl只搜索当前的命名容器,因此您需要深入了解每个命名容器(FormView,TabContainer和TabPanel)以获取TextBox。
希望有所帮助。
亚伦
块引用