这个问题最初是关于双向绑定工作,但由于缺乏具体的答案和其他方面的进展,我一直在更新它 - 你可以检查编辑历史,但我认为这是更好的明晰.
下面的代码列表允许单个对象与模板化控件进行双向数据绑定.我想以最简单的方式扩展此示例,以允许为最根对象的复杂类型属性嵌套类似的双向数据绑定启用的模板化控件.例如,SampleFormData有一个属性List<string> Items.我希望能够在最根本模板(从此代码清单)中绑定到此列表,并在可编辑的文本框列表中显示字符串数据,可能还有插入,删除,重新绑定输入的命令-changes(返回绑定对象的List属性).此外,如果这是一个复杂类型的列表(SampleFormChildData而不是字符串),则SampleSpecificEntryForm可以在列表中使用新的嵌入式,绑定到每个列表的项目,如转发器.如果作者如此选择,那么直到叶子简单的属性.ui-fields不需要自动生成,只能用于绑定.
注意:这种情况List<string>很特殊,因为即使内置绑定也不能直接处理字符串作为DataItem - 直接绑定到字符串作为列表中的项目不是必需的,但肯定是有价值的.
这与a不同,FormView因为它不是为了期望绑定到项目列表中的一个,而是仅绑定到在viewstate中持久存在的单个项目.与FormView不同,它只有一个类似于FormView的EditTemplate的默认模板.同样,绑定到类似集合的属性也只有一个视图 - 编辑.没有选择行然后编辑.一切都是可编辑的.目的是使双向绑定表单更容易构建.
在我看来,应该有两种绑定. SingleEntityBinding和CollectionBinding. SingleEntityBinding将单个对象实例作为数据源(作为原型SampleSpecificEntryForm),同时CollectionBinding可以绑定到它的父级SingleEntityBinding,其属性DataSourceID="EntryForm1" DataMember="Items"如DataList1下面的代码示例中所示.任何一种类型都应支持任一类型的嵌套.对支持对象的数据进行插入/更改/删除类型操作等列表操作是表单作者的责任; 但是,这种机制实施起来相对简单.
这是一些代码,希望它能帮到某些人.对于这个布局目标,最好的建议是200分......
using System.ComponentModel;
using System.Collections.Specialized;
using System.Collections.Generic;
namespace System.Web.UI.WebControls.Special
{
[Serializable]
public class SampleFormData
{
public string SampleString { get; set; }
public int SampleInt { get; set; }
public List<string> Items { get; set; }
public SampleFormData() …Run Code Online (Sandbox Code Playgroud)