所以对于ASP中的双向(双向)数据绑定,我们这样做……
<asp:textBox id="txtField" runat="server" text='<%# Bind("SomeField") %>'> </asp:textBox>
SomeField位于DetailsView的DataSource上,作为文本框的容器.
或者,我可以从代码隐藏(使用文本框的OnDataBinding事件)执行此操作:
protected void SomeField_OnDataBinding(object sender,EventArgs e) { ((TextBox)sender).Text = Eval("SomeField").ToString(); }
但是,EVAL是只读的……如何从代码隐藏中指定Bind(双向)?
解决方法
我已经设法为我的“边缘案例”找到了解决办法.
我正在使用LLBLGen子类型,因此需要根据用户选择的radiobutton过滤器切换detailsview的数据源.
我尝试使用<%#Bind(...)在ASP中“声明性地”绑定到子类型字段
这没用.
我必须解决一个代码隐藏的“黑客”,我使用details_view预渲染方法在detailsview中有条件地显示控件.
对于每个字段,我然后在OnDataBinding中有条件地设置它的单向(只读)绑定…
e.g. ((TextBox)sender).Text = Eval("FilePrefix").ToString();
最终将数据推入数据源,我破解了DetailsView OnItemInserting / Updating事件(有条件地)…
e.Values["FilePrefix"] = txtFilePrefix.Text;
在这次黑客攻击后我感觉很脏,我想我需要淋浴……
我仍然希望有人可以提供更清洁的方法:-)