使用DataList控件中嵌套GridView控件主要是为了解决数据分类绑定的问题。在做web应用程序开发时,特别是大型网站,后台处理数据时经常会遇到数据分类绑定。如两个互有关联的数据表同时按条件显示在页面。将GridView控件嵌套在DataList控件中,可以把分类信息显示在DataList控件中,在GridView控件中显示对应具体的信息。
在页面上创建下面的示例。在页面上添加一个DataList控件,并完成它的数据源配置,将SQL命令设置如下SELECT BianH,ZhuCYHM,XingM,XingB FROM T_YongH。进入到DataList控件的项模板编辑框中,在ItemTemplate模板编辑框中添加一个TextBox控件,将它绑定到ZhuCYHM字段上。接着在ItemTemplate模板编辑框添加GridView控件。这样就完成了前台代码的设置。
对应HTML代码如下所示:
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
DataList_exam11.aspx.cs
"
Inherits
=
"
DataList_exam11
"
%>
<! 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 > DataList_exam11 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
< asp:datalist id = " DataList1 " Runat = " server " ShowFooter = " False " ShowHeader = " False " OnItemDataBound = " DataList1_ItemDataBound " >
< ItemStyle VerticalAlign = " Top " ></ ItemStyle >
< ItemTemplate >
< TABLE id = " Table1 " cellSpacing = " 0 " cellPadding = " 0 " width = " 100% " border = " 0 " style = " height: 123px " >
< TR bgColor = " aliceblue " >
< TD class = " title " style = " height: 25px " >
用户名: < asp:HyperLink id = " ZhuCYHM " runat = " server " Font - Bold = " True " Target = " _blank " Text = ' <%# Eval("ZhuCYHM") %> ' ></ asp:HyperLink >< br />
详细信息: </ TD >
</ TR >
< TR >
< TD vAlign = " top " style = " height: 133px " >
< asp:GridView ID = " GridView1 " runat = " server " OnDataBinding = " GridView1_DataBinding " >
< Columns >
< asp:CommandField ShowEditButton = " True " />
</ Columns >
</ asp:GridView >
</ TD >
</ TR >
</ TABLE >
</ ItemTemplate >
</ asp:datalist >& nbsp;
</ 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 > DataList_exam11 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
< asp:datalist id = " DataList1 " Runat = " server " ShowFooter = " False " ShowHeader = " False " OnItemDataBound = " DataList1_ItemDataBound " >
< ItemStyle VerticalAlign = " Top " ></ ItemStyle >
< ItemTemplate >
< TABLE id = " Table1 " cellSpacing = " 0 " cellPadding = " 0 " width = " 100% " border = " 0 " style = " height: 123px " >
< TR bgColor = " aliceblue " >
< TD class = " title " style = " height: 25px " >
用户名: < asp:HyperLink id = " ZhuCYHM " runat = " server " Font - Bold = " True " Target = " _blank " Text = ' <%# Eval("ZhuCYHM") %> ' ></ asp:HyperLink >< br />
详细信息: </ TD >
</ TR >
< TR >
< TD vAlign = " top " style = " height: 133px " >
< asp:GridView ID = " GridView1 " runat = " server " OnDataBinding = " GridView1_DataBinding " >
< Columns >
< asp:CommandField ShowEditButton = " True " />
</ Columns >
</ asp:GridView >
</ TD >
</ TR >
</ TABLE >
</ ItemTemplate >
</ asp:datalist >& nbsp;
</ div >
</ form >
</ body >
</ html >
接下来开始编写后台代码来实现具体嵌套功能。首先在Page_Load中实现DataList1控件的数据绑定,在此使用的是动态绑定数据,建立数据库连接,然后将SELECT BianH,ZhuCYHM,XingM,XingB FROM T_YongH查询出来的数据绑定到DataList1控件。最后使用DataList1_ItemDataBound事件实现在DataList控件中嵌套GridView控件的功能。具体代码如下所示:
public
partial
class
DataList_exam11 : System.Web.UI.Page
... {
protected void Page_Load(object sender, EventArgs e)
...{
//声明一个字符串
string sConnectionString;
//连接数据库字符串,连接到XBMIS数据库,用户名是sa
sConnectionString = " Data Source=.;Initial Catalog= XBMIS;User ID=sa; ";
//创建SqlConnection数据库连接对象
SqlConnection Conn = new SqlConnection(sConnectionString);
SqlDataAdapter Adapter = new SqlDataAdapter("SELECT BianH, ZhuCYHM, XingM, XingB FROM T_YongH", Conn);
Conn.Open();
DataSet ds = new DataSet();
Adapter.Fill(ds, "yongh");
DataList1.DataSource = ds.Tables["yongh"].DefaultView;
DataList1.DataBind();
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
...{
//只在itemType=Item和AlternatingItem进行处理
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
...{
//取出此item数据
DataRowView dr = (DataRowView)e.Item.DataItem;
//找到此item里的GridView,这里是实现分类显示数据的关键
GridView GridView1 = (GridView)e.Item.FindControl("GridView1");
//根据此item的值查找ZhuCYHM和在记录模板中显示的注册用户名一样的数据记录,先要建立连接,然后填充数据
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog= XBMIS;User ID=sa;");
SqlDataAdapter da = new SqlDataAdapter("SELECT BianH, ZhuCYHM, XingM, XingB FROM T_YongH where ZhuCYHM=@ZhuCYHM", conn);
//添加ZhuCYHM参数
da.SelectCommand.Parameters.Add("@ZhuCYHM", SqlDbType.NVarChar).Value = Convert.ToString(dr["ZhuCYHM"]);
//给GridView添加DataBinding事件
DataSet ds = new DataSet();
da.Fill(ds, "yongh");
//绑定数据到GridView1
GridView1.DataBound += new EventHandler(GridView1_DataBinding);
GridView1.DataSource = ds.Tables["yongh"];
GridView1.DataBind();
}
}
protected void GridView1_DataBinding(object sender, EventArgs e)
...{
//必须生成GridView1_DataBinding事件
}
}
... {
protected void Page_Load(object sender, EventArgs e)
...{
//声明一个字符串
string sConnectionString;
//连接数据库字符串,连接到XBMIS数据库,用户名是sa
sConnectionString = " Data Source=.;Initial Catalog= XBMIS;User ID=sa; ";
//创建SqlConnection数据库连接对象
SqlConnection Conn = new SqlConnection(sConnectionString);
SqlDataAdapter Adapter = new SqlDataAdapter("SELECT BianH, ZhuCYHM, XingM, XingB FROM T_YongH", Conn);
Conn.Open();
DataSet ds = new DataSet();
Adapter.Fill(ds, "yongh");
DataList1.DataSource = ds.Tables["yongh"].DefaultView;
DataList1.DataBind();
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
...{
//只在itemType=Item和AlternatingItem进行处理
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
...{
//取出此item数据
DataRowView dr = (DataRowView)e.Item.DataItem;
//找到此item里的GridView,这里是实现分类显示数据的关键
GridView GridView1 = (GridView)e.Item.FindControl("GridView1");
//根据此item的值查找ZhuCYHM和在记录模板中显示的注册用户名一样的数据记录,先要建立连接,然后填充数据
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog= XBMIS;User ID=sa;");
SqlDataAdapter da = new SqlDataAdapter("SELECT BianH, ZhuCYHM, XingM, XingB FROM T_YongH where ZhuCYHM=@ZhuCYHM", conn);
//添加ZhuCYHM参数
da.SelectCommand.Parameters.Add("@ZhuCYHM", SqlDbType.NVarChar).Value = Convert.ToString(dr["ZhuCYHM"]);
//给GridView添加DataBinding事件
DataSet ds = new DataSet();
da.Fill(ds, "yongh");
//绑定数据到GridView1
GridView1.DataBound += new EventHandler(GridView1_DataBinding);
GridView1.DataSource = ds.Tables["yongh"];
GridView1.DataBind();
}
}
protected void GridView1_DataBinding(object sender, EventArgs e)
...{
//必须生成GridView1_DataBinding事件
}
}