使用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事件
}
}