本主题描述如何启用主/从模式,并在数据源级别提供了数据 —— 通过集合属性。 要学习其他实现主/从模式的方法,请参阅 数据绑定特性。
实现集合属性
如果网格控件被绑定到数据源,在此数据源中每个记录对象都提供了集合类型的属性,则主/从模式被调用。 在这种情况下,对于每条记录,集合属性的成员将被显示为细节视图。
因此,如果需要为记录提供细节数据,并把它们显示为细节视图,则可以为呈现数据源记录的对象实现集合属性。
考虑下面的示例 (此示例的完整代码可以在 非绑定主表视图 网格指南中找到)。 假设网格控件被绑定到数据源,在数据源中每条记录都由 NestedRecord 类表示:
C# | 复制代码 |
---|---|
public class NestedRecord { private string fName; ArrayList fChildList = null; public NestedRecord(string name, ArrayList childList) { this.fName = name; this.fChildList = childList; } public string Name { get { return fName; } set { fName = value; } } public ArrayList ChildList { get { return fChildList; } set { fChildList = value; } } } |
Visual Basic | 复制代码 |
---|---|
Public Class NestedRecord Private fName As String Private fChildList As ArrayList = Nothing Public Sub New(ByVal name As String, ByVal childList As ArrayList) Me.fName = name Me.fChildList = childList End Sub Public Property Name() As String Get Return fName End Get Set(ByVal value As String) fName = Value End Set End Property Public Property ChildList() As ArrayList Get Return fChildList End Get Set(ByVal value As ArrayList) fChildList = Value End Set End Property End Class |
NestedRecord 类提供了集合类型的 ChildList 公共属性。 网格控件把由这个集合属性提供的数据显示为细节视图,除非 GridOptionsDetail.EnableMasterViewMode 属性值被设置为 false。
在本示例中,网格控件被绑定到表示 NestedRecord 对象数组的数据源。
C# | 复制代码 |
---|---|
gridControl1.DataSource = new NestedRecords(); //... public class NestedRecords : ArrayList { public NestedRecords() { Add(new NestedRecord("Customers", new ChildRecordsCustomers())); Add(new NestedRecord("Products", new ChildRecordsProducts())); Add(new NestedRecord("Shippers", new ChildRecordsShippers())); } public virtual new NestedRecord this[int index] { get { return (NestedRecord)(base[index]); } } } |
Visual Basic | 复制代码 |
---|---|
GridControl1.DataSource = New NestedRecords() '... Public Class NestedRecords Inherits ArrayList Public Sub New() Add(New NestedRecord("Customers", New ChildRecordsCustomers())) Add(New NestedRecord("Products", New ChildRecordsProducts())) Add(New NestedRecord("Shippers", New ChildRecordsShippers())) End Sub Default Public Overridable Shadows ReadOnly Property _ Item(ByVal index As Integer) As NestedRecord Get Return CType(MyBase.Item(index), NestedRecord) End Get End Property End Class |
这里,网格被绑定到包含三条记录 (“Customers”、“Products”和“Shippers”) 的数据源。 对于每条记录,绑定的细节数据由 ChildRecordsCustomers、ChildRecordsProducts 和 ChildRecordsShippers 类表示。 这些类是 ArrayList 类的子类。 它们的实现很普通,在此处省略。 请参阅 非绑定主表视图 网格指南获得完整的代码。
代码的执行结果如下图所示: