let it be
行到水穷处 坐看云起时

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

       接下来开始编写后台代码来实现具体嵌套功能。首先在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=ItemAlternatingItem进行处理

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

    }

}

posted on 2007-08-15 19:19  流浪浪  阅读(1350)  评论(1编辑  收藏  举报