使用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" >


<TR bgColor="aliceblue">


<TD class="title" >


用戶名:<asp:HyperLink id="ZhuCYHM" runat="server" Font-Bold="True" Target="_blank" Text='<%# Eval("ZhuCYHM") %>'></ASP:HyperLink><br />


詳細信息:</TD>


</TR>


<TR>


<TD vAlign="top" >


<ASP:GridView ID="GridView1" runat="server" OnDataBinding="GridVIEw1_DataBinding">


<Columns>


<ASP:CommandFIEld ShowEditButton="True" />


</Columns>


</ASP:GridVIEw>


</TD>


</TR>


</TABLE>


</ItemTemplate>


</ASP:datalist>



</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事件


}


}