对于一个list有多层嵌套,如:一个产品有大类,大类下面有二级分类,再下有三级分类等,对于这种可用在DataGrid中再嵌套DataGrid,并同时将嵌套的DataGrid添加如事件,使其也能相应事件。其页面代码需要手工添入,无法用VS2003的可视化添入。
以下页面代码中有三个DataGrid:DG_Group,DG_6D,DG_Equ,依次嵌套。
<%@ Page language="c#" Codebehind="BackCodeDataGrid2.aspx.cs" AutoEventWireup="false" Inherits="WebTest.BackCodeDataGrid2" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>BackCodeDataGrid</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<LINK href="style.css" type="text/css" rel="stylesheet">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table cellSpacing="1" cellPadding="1" width="100%" align="center" bgColor="#3366ff" border="0">
<tr>
<td class="head_table" bgColor="#4d4d4d"><asp:datagrid id="DG_Header" runat="server" AutoGenerateColumns="False">
<HeaderStyle CssClass="head_table style1" BackColor="#4D4D4D"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Model">
<HeaderStyle Width="13%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Description">
<HeaderStyle Width="25%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Listed Price">
<HeaderStyle Width="13%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Quantity">
<HeaderStyle Width="8%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Gross Amt">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Discount">
<HeaderStyle Width="6%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Net Amt">
<HeaderStyle Width="7%"></HeaderStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Unit Cost"></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="GP%"></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Delete"></asp:TemplateColumn>
</Columns>
</asp:datagrid></td>
</tr>
<tr>
<td class="head_table" bgColor="#4d4d4d"><asp:datagrid id="DG_Group" runat="server" AutoGenerateColumns="False" ShowHeader="False" AllowPaging="True"
width="100%">
<Columns>
<asp:TemplateColumn HeaderText="分组名">
<ItemTemplate>
<TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
<TR>
<TD bgColor="#ffd600">分组名:<%# DataBinder.Eval(Container.DataItem, "Group_Name") %></TD>
</TR>
<TR>
<TD align="right">
<asp:DataGrid id="DG_6D" runat="server" AutoGenerateColumns="False" ShowHeader="False" width="100%">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
<TR>
<TD bgColor="#ffd600">6D名:<%# DataBinder.Eval(Container.DataItem, "Group_6D_Name") %></TD>
</TR>
<TR>
<TD align="right">
<asp:DataGrid id="DG_Equ" runat="server" AutoGenerateColumns="False" ShowHeader="False" width="100%">
<Columns>
<asp:TemplateColumn HeaderText="Model">
<HeaderStyle Width="13%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Model" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ProductCode") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Description">
<HeaderStyle Width="25%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Desc" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Product_Model") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Listed Price">
<HeaderStyle Width="13%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Listed_Price" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Quantity">
<HeaderStyle Width="8%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Qty" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Gross Amt">
<HeaderStyle Width="10%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Gross_Amt" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Discount">
<HeaderStyle Width="6%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Discount" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Net Amt">
<HeaderStyle Width="7%"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Lb_Net_Amt" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Unit Cost">
<ItemTemplate>
<asp:Label id="Lb_Unit_Cost" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="GP%">
<ItemTemplate>
<asp:Label id="Lb_GP" CssClass="head_table style1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equ_type") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Delete">
<ItemTemplate>
<asp:ImageButton id="ImageButton1" runat="server" ImageUrl="del.gif" CommandName="Delete"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Equ_ID" Visible="False">
<ItemTemplate>
<asp:Label id="Lb_Equ_ID" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Equipment_ID") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid></TD>
</TR>
</TABLE>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn Visible="False">
<ItemTemplate>
<asp:Label id="Lb1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Group_6D_ID") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</TR>
</TABLE>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn Visible="False" HeaderText="Group_ID">
<ItemTemplate>
<asp:Label id="Lb2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Group_ID") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
</asp:datagrid></td>
</tr>
</table>
</form>
</body>
</HTML>
cs文件:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace WebTest
{
/// <summary>
/// BackCodeDataGrid 的摘要说明。
/// </summary>
public class BackCodeDataGrid : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DG_6D;
protected System.Web.UI.WebControls.DataGrid DG_Group;
private DataTable dt_Group;
private DataTable dt_6D;
private DataTable dt_Equ;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
dt_Group=new DataTable("Equ_Group");
dt_6D=new DataTable("Group6D");
dt_Equ=new DataTable("Equipment");
SqlConnection conn=new SqlConnection(DataBase.ConnString);
SqlDataAdapter da;
da=new SqlDataAdapter("select * from equipmentgroup",conn);
da.Fill(dt_Group);
da=new SqlDataAdapter("select * from Group6D",conn);
da.Fill(dt_6D);
da=new SqlDataAdapter("select * from Equipment",conn);
da.Fill(dt_Equ);
BindGrid1();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DG_Group.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DG_Group_ItemCreated);
this.DG_Group.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DG_Group_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void BindGrid1()
{
DG_Group.DataSource=dt_Group.DefaultView;
DG_Group.DataBind();
}
private void DG_Group_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType!=ListItemType.Header && e.Item.ItemType!=ListItemType.Footer)
{
//
DataGrid DG_6D=(DataGrid)e.Item.FindControl("DG_6D");
Label lb=(Label)e.Item.Cells[1].FindControl("Lb2");
string gr_id=lb.Text;
dt_6D.DefaultView.RowFilter="Group_ID="+gr_id;
DG_6D.DataSource=dt_6D;
DG_6D.DataBind();
}
}
private void DG_Group_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
{
DataGrid DG_6D = (DataGrid)e.Item.FindControl("DG_6D");
DG_6D.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler( this.DG_6D_ItemDataBound );
//DG_6D.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DG_6D_ItemCommand);
}
}
private void DG_6D_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType!=ListItemType.Header && e.Item.ItemType!=ListItemType.Footer)
{
//
DataGrid DG_Equ=(DataGrid)e.Item.FindControl("DG_Equ");
Label lb=(Label)e.Item.Cells[1].FindControl("Lb1");
string gr_6d_id=lb.Text;
dt_Equ.DefaultView.RowFilter="Group_6D_ID="+gr_6d_id;
DG_Equ.DataSource=dt_Equ;
DG_Equ.DataBind();
}
}
}
}