当需要在一个列表中显示主从表(例如部门-人员的信息),在asp.net1.1中我们可能会使用DataGrid模版列嵌套DataGrid的方法实现,然而,处理模版列里的DataGrid的翻页、排序、编辑等功能时都比较麻烦。在asp.net2.0中,配合DataSource控件的使用让这个问题变得非常简单!
只需要上面几行简单的代码便可以实现。
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView_GirdView.aspx.cs" Inherits="GridSamples_GridView_GirdView"
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="False" DataKeyNames ="deptid"
DataSourceID ="AccessDataSource1" AllowPaging ="True" AllowSorting ="True" PageSize ="2" OnRowDataBound ="GridView1_RowDataBound" >
< Columns >
< asp:BoundField DataField ="deptid" HeaderText ="部门编号" InsertVisible ="False" ReadOnly ="True"
SortExpression ="deptid" />
< asp:BoundField DataField ="deptname" HeaderText ="部门名称" SortExpression ="deptname" />
< asp:BoundField DataField ="deptremark" HeaderText ="备注" SortExpression ="deptremark" />
< asp:TemplateField HeaderText ="人员信息" >
< ItemTemplate >
< asp:GridView ID ="GridView2" runat ="server" AutoGenerateColumns ="False" DataKeyNames ="id"
DataSourceID ="AccessDataSource2" AllowPaging ="True" AllowSorting ="True" PageSize ="5" >
< Columns >
< asp:BoundField DataField ="id" HeaderText ="人员编号" InsertVisible ="False" ReadOnly ="True"
SortExpression ="id" />
< asp:BoundField DataField ="name" HeaderText ="姓名" SortExpression ="name" />
< asp:BoundField DataField ="sex" HeaderText ="性别" SortExpression ="sex" />
</ Columns >
< PagerSettings FirstPageText ="首页" LastPageText ="末页" Mode ="NextPreviousFirstLast"
NextPageText ="下一页" PreviousPageText ="上一页" />
</ asp:GridView >
< asp:AccessDataSource ID ="AccessDataSource2" runat ="server" DataFile ="~/App_Data/test.mdb"
SelectCommand ="SELECT [id], [name], [sex], [deptid] FROM [employees] WHERE ([deptid] = ?)" >
< SelectParameters >
< asp:Parameter Name ="deptid" Type ="Int32" />
</ SelectParameters >
</ asp:AccessDataSource >< br >
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
< PagerSettings FirstPageText ="首页" LastPageText ="末页"
NextPageText ="下一页" PreviousPageText ="上一页" />
</ asp:GridView >
< asp:AccessDataSource ID ="AccessDataSource1" runat ="server" DataFile ="~/App_Data/test.mdb"
SelectCommand ="SELECT [deptid], [deptname], [deptremark], [createdate] FROM [departments]" >
</ asp:AccessDataSource >
</ div >
</ form >
</ body >
</ html >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="False" DataKeyNames ="deptid"
DataSourceID ="AccessDataSource1" AllowPaging ="True" AllowSorting ="True" PageSize ="2" OnRowDataBound ="GridView1_RowDataBound" >
< Columns >
< asp:BoundField DataField ="deptid" HeaderText ="部门编号" InsertVisible ="False" ReadOnly ="True"
SortExpression ="deptid" />
< asp:BoundField DataField ="deptname" HeaderText ="部门名称" SortExpression ="deptname" />
< asp:BoundField DataField ="deptremark" HeaderText ="备注" SortExpression ="deptremark" />
< asp:TemplateField HeaderText ="人员信息" >
< ItemTemplate >
< asp:GridView ID ="GridView2" runat ="server" AutoGenerateColumns ="False" DataKeyNames ="id"
DataSourceID ="AccessDataSource2" AllowPaging ="True" AllowSorting ="True" PageSize ="5" >
< Columns >
< asp:BoundField DataField ="id" HeaderText ="人员编号" InsertVisible ="False" ReadOnly ="True"
SortExpression ="id" />
< asp:BoundField DataField ="name" HeaderText ="姓名" SortExpression ="name" />
< asp:BoundField DataField ="sex" HeaderText ="性别" SortExpression ="sex" />
</ Columns >
< PagerSettings FirstPageText ="首页" LastPageText ="末页" Mode ="NextPreviousFirstLast"
NextPageText ="下一页" PreviousPageText ="上一页" />
</ asp:GridView >
< asp:AccessDataSource ID ="AccessDataSource2" runat ="server" DataFile ="~/App_Data/test.mdb"
SelectCommand ="SELECT [id], [name], [sex], [deptid] FROM [employees] WHERE ([deptid] = ?)" >
< SelectParameters >
< asp:Parameter Name ="deptid" Type ="Int32" />
</ SelectParameters >
</ asp:AccessDataSource >< br >
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
< PagerSettings FirstPageText ="首页" LastPageText ="末页"
NextPageText ="下一页" PreviousPageText ="上一页" />
</ asp:GridView >
< asp:AccessDataSource ID ="AccessDataSource1" runat ="server" DataFile ="~/App_Data/test.mdb"
SelectCommand ="SELECT [deptid], [deptname], [deptremark], [createdate] FROM [departments]" >
</ asp:AccessDataSource >
</ div >
</ form >
</ body >
</ html >
1
using
System;
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11
12 public partial class GridSamples_GridView_GirdView : System.Web.UI.Page
13 {
14 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
15 {
16 if (e.Row.RowIndex > -1)
17 {
18 AccessDataSource accessDS = e.Row.FindControl("AccessDataSource2") as AccessDataSource;
19 accessDS.SelectParameters["deptid"].DefaultValue = e.Row.Cells[0].Text;
20 }
21 }
22}
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11
12 public partial class GridSamples_GridView_GirdView : System.Web.UI.Page
13 {
14 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
15 {
16 if (e.Row.RowIndex > -1)
17 {
18 AccessDataSource accessDS = e.Row.FindControl("AccessDataSource2") as AccessDataSource;
19 accessDS.SelectParameters["deptid"].DefaultValue = e.Row.Cells[0].Text;
20 }
21 }
22}
只需要上面几行简单的代码便可以实现。