例子比较简单,直接贴代码了,例子达到以下功能:
(1)两个datagrid嵌套
(2)外面一个datagrid分页
(3)里面一个datagrid动态增加模板列
<%@ page language=“c#“ codebehind=“webform45.aspx.cs“ autoeventwireup=“false“ inherits=“csdn2.webform45“ %>
<!doctype html public “-//w3c//dtd html 4.0 transitional//en” >
<html>
<head>
<title>test</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”>
</head>
<body>
<form id=”form1″ method=”post” runat=”server”>
<asp:datagrid id=”datagrid1″ runat=”server” autogeneratecolumns=”false” pagesize=”2″ allowpaging=”true”>
<columns>
<asp:templatecolumn headertext=”分类名”>
<itemtemplate>
<%# databinder.eval(container.dataitem, “classname“) %>
<asp:datagrid id=”datagrid2″ runat=”server” autogeneratecolumns=”false”></asp:datagrid>
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid></form>
</body>
</html>
<!doctype html public “-//w3c//dtd html 4.0 transitional//en” >
<html>
<head>
<title>test</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”>
</head>
<body>
<form id=”form1″ method=”post” runat=”server”>
<asp:datagrid id=”datagrid1″ runat=”server” autogeneratecolumns=”false” pagesize=”2″ allowpaging=”true”>
<columns>
<asp:templatecolumn headertext=”分类名”>
<itemtemplate>
<%# databinder.eval(container.dataitem, “classname“) %>
<asp:datagrid id=”datagrid2″ runat=”server” autogeneratecolumns=”false”></asp:datagrid>
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid></form>
</body>
</html>
using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.data.sqlclient;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
namespace csdn2
{
/// <summary>
/// webform45 的摘要说明。
/// </summary>
public class webform45 : system.web.ui.page
{
protected system.web.ui.webcontrols.datagrid datagrid1;
private void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
if(!ispostback)
{
setbind();
}
}
private void setbind()
{
sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings[“conn“]);
sqldataadapter da=new sqldataadapter(“select * from class;select * from topic“,conn);
dataset ds=new dataset();
da.fill(ds);
ds.relations.add(“class_topic“,ds.tables[0].columns[“classid“],ds.tables[1].columns[“topicclassid“]);
this.datagrid1.datasource=ds.tables[0];
this.datagrid1.databind();
}
#region web 窗体设计器生成的代码
override protected void oninit(eventargs e)
{
//
// codegen: 该调用是 asp.net web 窗体设计器所必需的。
//
initializecomponent();
base.oninit(e);
}
/// <summary>
/// 设计器支持所需的方法 – 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void initializecomponent()
{
this.datagrid1.pageindexchanged += new system.web.ui.webcontrols.datagridpagechangedeventhandler(this.datagrid1_pageindexchanged);
this.datagrid1.itemdatabound += new system.web.ui.webcontrols.datagriditemeventhandler(this.datagrid1_itemdatabound);
this.load += new system.eventhandler(this.page_load);
}
#endregion
private void datagrid1_itemdatabound(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
{
if(e.item.itemtype==listitemtype.item||e.item.itemtype==listitemtype.alternatingitem)
{
datagrid dgrd=(datagrid)e.item.findcontrol(“datagrid2“);
dgrd.itemdatabound += new system.web.ui.webcontrols.datagriditemeventhandler(this.datagrid2_itemdatabound);
templatecolumn tm=new templatecolumn();
tm.itemtemplate=new columntemplate();
tm.headertext=“主题名“;
dgrd.columns.add(tm);
dgrd.datasource=((datarowview)e.item.dataitem).row.getchildrows(“class_topic“);
dgrd.databind();
}
}
private void datagrid1_pageindexchanged(object source, system.web.ui.webcontrols.datagridpagechangedeventargs e)
{
this.datagrid1.currentpageindex=e.newpageindex;
setbind();
}
private void datagrid2_itemdatabound(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
{
if(e.item.itemtype==listitemtype.item||e.item.itemtype==listitemtype.alternatingitem)
{
((label)e.item.findcontrol(“topicname“)).text=convert.tostring(databinder.eval(e.item.dataitem,“[\“topicname\“]“));
}
}
}
public class columntemplate : itemplate
{
public void instantiatein(control container)
{
label l=new label();
l.id=“topicname“;
container.controls.add(l);
}
}
}
using system.collections;
using system.componentmodel;
using system.data;
using system.data.sqlclient;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
namespace csdn2
{
/// <summary>
/// webform45 的摘要说明。
/// </summary>
public class webform45 : system.web.ui.page
{
protected system.web.ui.webcontrols.datagrid datagrid1;
private void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
if(!ispostback)
{
setbind();
}
}
private void setbind()
{
sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings[“conn“]);
sqldataadapter da=new sqldataadapter(“select * from class;select * from topic“,conn);
dataset ds=new dataset();
da.fill(ds);
ds.relations.add(“class_topic“,ds.tables[0].columns[“classid“],ds.tables[1].columns[“topicclassid“]);
this.datagrid1.datasource=ds.tables[0];
this.datagrid1.databind();
}
#region web 窗体设计器生成的代码
override protected void oninit(eventargs e)
{
//
// codegen: 该调用是 asp.net web 窗体设计器所必需的。
//
initializecomponent();
base.oninit(e);
}
/// <summary>
/// 设计器支持所需的方法 – 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void initializecomponent()
{
this.datagrid1.pageindexchanged += new system.web.ui.webcontrols.datagridpagechangedeventhandler(this.datagrid1_pageindexchanged);
this.datagrid1.itemdatabound += new system.web.ui.webcontrols.datagriditemeventhandler(this.datagrid1_itemdatabound);
this.load += new system.eventhandler(this.page_load);
}
#endregion
private void datagrid1_itemdatabound(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
{
if(e.item.itemtype==listitemtype.item||e.item.itemtype==listitemtype.alternatingitem)
{
datagrid dgrd=(datagrid)e.item.findcontrol(“datagrid2“);
dgrd.itemdatabound += new system.web.ui.webcontrols.datagriditemeventhandler(this.datagrid2_itemdatabound);
templatecolumn tm=new templatecolumn();
tm.itemtemplate=new columntemplate();
tm.headertext=“主题名“;
dgrd.columns.add(tm);
dgrd.datasource=((datarowview)e.item.dataitem).row.getchildrows(“class_topic“);
dgrd.databind();
}
}
private void datagrid1_pageindexchanged(object source, system.web.ui.webcontrols.datagridpagechangedeventargs e)
{
this.datagrid1.currentpageindex=e.newpageindex;
setbind();
}
private void datagrid2_itemdatabound(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
{
if(e.item.itemtype==listitemtype.item||e.item.itemtype==listitemtype.alternatingitem)
{
((label)e.item.findcontrol(“topicname“)).text=convert.tostring(databinder.eval(e.item.dataitem,“[\“topicname\“]“));
}
}
}
public class columntemplate : itemplate
{
public void instantiatein(control container)
{
label l=new label();
l.id=“topicname“;
container.controls.add(l);
}
}
}