可编辑的嵌套DataGrid


这张图是从Access 2007中截取过来的,我们可以清晰地看到它的组成类似于嵌套的DataGrid,可收缩可扩展。本文将讲述如何实现嵌套的DataGrid,以及DataGrid的操作。
PS:这里我们将外层DataGrid定义为父DataGrid,内层DataGrid定义为子DataGrid
子DataGrid嵌套的父DataGrid里,是因为子DataGrid作为父DataGrid中某模板列中的控件,特别提醒将子DataGrid放在PlaceHolder中,以便日后可以收缩与扩展。
<asp:DataGrid
DataSource
='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("ParentTable_ChildTable") %>'
runat
=server
id
=DataGrid2
CellPadding
="2"
BackColor
="#f1f1f1"
Font
-Name="Verdana"
Font
-Size="8pt"
AutoGenerateColumns
=false
ItemStyle
-VerticalAlign="Top"
ShowFooter
="True"
OnItemCommand
="DataGrid2_ItemCommand"
OnPageIndexChanged
="DataGrid2_PageIndexChanged"
OnSortCommand
="DataGrid2_SortCommand"
AllowPaging
="True"
AllowSorting
="True"
EnableViewState
=true>
这里要特别说明CreateChildView事件,下面是MSDN中解释
Returns a DataView for the child DataTable with the specified DataRelation.

Namespace: System.Data
Assembly: System.Data (
in system.data.dll)
在后台代码中需要绑定父DataGrid和子DataGrid,并建立关系
DataTable ldtbParentTable=new DataTable();
DataTable ldtbChildTable
=new DataTable();
DataSet ds
=new DataSet();
DataRelation lobjDataRelation;
……
ds.Tables.Add(ldtbParentTable);
ds.Tables.Add(ldtbChildTable);
lobjDataRelation
=new DataRelation("ParentTable_ChildTable",ldtbParentTable.Columns["CustomerID"],
                                    ldtbChildTable.Columns[
"ChildCustomerID"],false);
lobjDataRelation.Nested
=true;
ds.Relations.Add(lobjDataRelation);
子DataGrid的收缩与扩展只要是控制上面提到的PlaceHolder的可见性。
父DataGrid,子DataGrid的增、删、改与操作一个DataGrid的增、删、改类似,这里就不再累赘。具体可下载代码参考。

代码下载

最后要特别感谢Satya Kanithi,他详细讲述了EditNestedDataGrid,并提供了VB.NET版本。
网址:http://www.codeproject.com/aspnet/EditNestedDataGrid.asp

posted @ 2007-09-14 10:23  神奇小子  阅读(828)  评论(1编辑  收藏  举报