利用Repeater解决DataGrid的嵌套显示问题
2006-03-24 00:03
459 查看
刚刚解决一个"老大难"的问题,高兴ing~~~趁热记录下来~
一直以来,客户需要在WEB上面显示嵌套的数据页面,如下图所示:
![](http://www.agilelabs.cn/photos/e5b7a5e4bd9c/images/167/original.aspx)
而我们的项目全部统一采用DataGrid来进行数据的绑定显示.对于这种嵌套数据的显示,我一直头疼.在网上搜了N种方法:采用嵌套DataGrid...手动在数据绑定的时候进行一些额外操作分割单元格.....全部都麻烦得要死.今天总算在CodeProject上面找到一种方便点的方法:采用Repeater来解决这个问题.
首先,来看下我的DataGrid中列的html代码:
<asp:BoundColumn Visible="False" DataField="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="OrganName" HeaderText="部门名称"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="员工">
<ItemTemplate>
<FONT face="宋体">
<asp:Repeater id="Repeater1" runat="server" DataSource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("parentchild") %>'>
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"[/"EmployeeName/"]")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater></FONT>
</ItemTemplate>
</asp:TemplateColumn>
其中的ID列表示机构的ID,用来和员工信息中的机构ID进行"关联".
再来看关键代码
DataSet ds = new DataSet();
DataTable dtOrgan = new DataTable();
dtOrgan.Columns.Add("ID",typeof(string));
dtOrgan.Columns.Add("OrganName",typeof(string));
...
/*...往机构表中灌数据...*/
ds.Tables.Add(dtOrgan);
DataTable dtEmployee = new DataTable();
dtEmployee.Columns.Add("OrganID",typeof(string));
dtEmployee.Columns.Add("EmployeeName",typeof(string));
...
/*...往员工表中灌数据...*/
ds.Tables.Add(dtEmployee);
ds.Relations.Add("parentchild",ds.Tables[0].Columns["ID"],ds.Tables[1].Columns["OrganID"]);
dgList.DataSource = ds.Tables[0].DefaultView;
dgList.DataBind();
最主要的就是利用了DataSet的Relations的属性,通过属性来将父子表关联起来,然后进行数据的绑定.最后,在WEB上运行出来的效果如下所示:
![](http://www.agilelabs.cn/photos/e5b7a5e4bd9c/images/166/original.aspx)
(没有写Repeater中Table的样式,稍微难看了些:)
一直以来,客户需要在WEB上面显示嵌套的数据页面,如下图所示:
而我们的项目全部统一采用DataGrid来进行数据的绑定显示.对于这种嵌套数据的显示,我一直头疼.在网上搜了N种方法:采用嵌套DataGrid...手动在数据绑定的时候进行一些额外操作分割单元格.....全部都麻烦得要死.今天总算在CodeProject上面找到一种方便点的方法:采用Repeater来解决这个问题.
首先,来看下我的DataGrid中列的html代码:
<asp:BoundColumn Visible="False" DataField="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="OrganName" HeaderText="部门名称"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="员工">
<ItemTemplate>
<FONT face="宋体">
<asp:Repeater id="Repeater1" runat="server" DataSource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("parentchild") %>'>
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"[/"EmployeeName/"]")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater></FONT>
</ItemTemplate>
</asp:TemplateColumn>
其中的ID列表示机构的ID,用来和员工信息中的机构ID进行"关联".
再来看关键代码
DataSet ds = new DataSet();
DataTable dtOrgan = new DataTable();
dtOrgan.Columns.Add("ID",typeof(string));
dtOrgan.Columns.Add("OrganName",typeof(string));
...
/*...往机构表中灌数据...*/
ds.Tables.Add(dtOrgan);
DataTable dtEmployee = new DataTable();
dtEmployee.Columns.Add("OrganID",typeof(string));
dtEmployee.Columns.Add("EmployeeName",typeof(string));
...
/*...往员工表中灌数据...*/
ds.Tables.Add(dtEmployee);
ds.Relations.Add("parentchild",ds.Tables[0].Columns["ID"],ds.Tables[1].Columns["OrganID"]);
dgList.DataSource = ds.Tables[0].DefaultView;
dgList.DataBind();
最主要的就是利用了DataSet的Relations的属性,通过属性来将父子表关联起来,然后进行数据的绑定.最后,在WEB上运行出来的效果如下所示:
(没有写Repeater中Table的样式,稍微难看了些:)
相关文章推荐
- 利用Repeater解决DataGrid的嵌套显示问题
- datalist,repeater,datagrid嵌套问题,,解决代码,,总结
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- Asp.net中DataGrid利用DataRelation显示主从表信息(可控制从表信息隐藏和显示).(DataGrid 嵌套)
- 解决AspNet中DataGrid GridView等列表控件导出Excel长数字显示成科学计数法的问题
- 解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题
- 解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 解决easyUI-datagrid不显示的问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- 解决在Winform中dataGrid第一列第一行颜色显示不正确问题。
- 解决ListView嵌套在ScrollerView中显示不全以及滑动冲突的问题
- MeasureSpec学习(解决ScrollView中嵌套ListView,ListView只显示一行的问题)
- [原] 解决在ScrollView中嵌套ListView或ExpandableListView时显示不全的问题
- 关于6.0ScrollView嵌套RecyclerView高度不正确显示不全问题解决办法
- repeater,datalist, datagrid的嵌套问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- JqueryEasyUI的DataGrid接收html内容后不显示问题的原因,解决方法
- ScrollView中嵌套ListView或者GridView时的滑动冲突 || ListView中嵌套GridView,GridView只显示一行的问题解决
- F7里利用DIV 模拟 textarea 显示回行的问题解决
- easyui 的Datagrid 表头显示不全问题解决