后置代码: 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;namespace StudyDotNet.DataList { /// <summary> /// DataList_DataGrid 的摘要说明。 /// </summary> public class DataList_DataGrid : System.Web.UI.Page { #region 控件申明区域 protected System.Web.UI.WebControls.DataList DataList1; #endregion
第二层的绑定主要是在第一层的DataGrid的ItemDataBound里面做以下操作
先建一个DataSet
把要绑定的数据放到DataSet里面
然后执行第二层的DataGrid的DataBind();
这样就可以了
http://www.dotnetjunkies.com/Tutorial/47792CB0-0990-4BD8-BF84-B6063C4C9BBC.dcik
直接生成一个2列的DataGrid;雏形
1列 2列
第1章
第1章 -第1节
第1章 -第2节
第1章 -第3节
第2章
第2章 -第1节
第2章 -第2节
//定义一个全局变量 private string cName="";记录上章名
//在DataGrid1_ItemDataBound事件中进行更改,设置第2列为隐藏
void DataGrid1_ItemDataBound(sender,e){
if(e.Item.Index ==-1)
return;
if(e.Item.Cells[0].Text ==cName){ //相同章
cName =e.Item.Cells[0].Text;
e.Item.Cells[0].Text = " --"+e.Item.Cells[1].Text;
}
e.Item.Cells[1].Visible =false;
}
//更改后得出你的结果
{
String DataPath = Server.MapPath("Database/C.mdb");
String strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + DataPath;
String strSql = "select * from Name_Unit order by Unit asc";
OleDbConnection Conn = new OleDbConnection(strConn);
OleDbDataAdapter Comd = new OleDbDataAdapter(strSql,Conn);
DataSet ds = new DataSet();
Comd.Fill(ds,"Name_Unit");for(int i=0;i<=ds.Tables["Name_Unit"].Rows.Count-1;i++)
{
Response.Write (ds.Tables["Name_Unit"].Rows[i]["Name"]+"<br>");
String strSql2 = "select * from Name_Segment where Unit='" + ds.Tables["Name_Unit"].Rows[i]["Unit"] + "'";
OleDbDataAdapter Comd2 = new OleDbDataAdapter(strSql2,Conn);
DataSet ds2 = new DataSet();
Comd2.Fill(ds2,"Name_Segment"); for(int j=0;j<=ds2.Tables["Name_Segment"].Rows.Count-1;j++)
{
Response.Write (ds2.Tables["Name_Segment"].Rows[j]["Name"]+"<br>");
} }Conn.Close();
}
对你应该有用
C# 的。
Html代码
<%@ Page language="c#" Codebehind="DataList_DataGrid.aspx.cs" AutoEventWireup="false" Inherits="StudyDotNet.DataList.DataList_DataGrid" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>DataList_DataGrid</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<!--************************问题描述区************************-->
<table width="100%" border="0">
<tr>
<td style="COLOR: red" align="center"><b>DataList中嵌套DataGrid ---Tree</b></td>
</tr>
<tr>
<td><b>出处:</b>自己写的</td>
</tr>
<tr>
<td>
<b>描述:</b>
<ul>
1.只有两层!<br>
2.分别响应第一层DataList、第二层DataGrid中的按钮事件<br>
3.可以带参数响应<br>
4.可以显示|隐藏第二层<br>
5.对比TreeButton.aspx的功能: 第二层是可以从第一层选择过滤而来
</ul>
</td>
</tr>
</table>
<hr>
<!--************************问题描述区(完)************************-->
<form id="Form1" method="post" runat="server">
<asp:DataList id="DataList1" runat="server">
<ItemTemplate>
<table>
<tr>
<td align="left">
<asp:ImageButton id="ImageButton1" CommandName="One" runat="server"></asp:ImageButton>
</td>
<td align="left">
<asp:LinkButton id="Linkbutton1" CommandName="One" runat="server">
<%# DataBinder.Eval(Container.DataItem,"Name")%>
</asp:LinkButton>
</td>
</tr>
<tr>
<td align="left"></td>
<td align="left">
<asp:Panel ID="Panel1" Runat="server" Visible="False">
<asp:DataGrid id="DataGrid1" runat="server" DataSource ='<%# CreateDataSource(DataBinder.Eval(Container.DataItem,"Name").ToString()) %>' OnItemCommand ="DataGrid1_ItemCommand" AutoGenerateColumns="False" BorderWidth="0px" CellPadding="0" GridLines="None" ShowHeader="False">
<AlternatingItemStyle HorizontalAlign="Left"></AlternatingItemStyle>
<ItemStyle HorizontalAlign="Left"></ItemStyle>
<Columns>
<asp:BoundColumn DataField="Name" ItemStyle-Width=100></asp:BoundColumn>
<asp:BoundColumn DataField="Sex" ItemStyle-Width=100></asp:BoundColumn>
<asp:BoundColumn DataField="Age" ItemStyle-Width=100></asp:BoundColumn>
<asp:ButtonColumn Text="按钮" ItemStyle-Width=100></asp:ButtonColumn>
</Columns>
</asp:DataGrid>
</asp:Panel>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</form>
</body>
</HTML>
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;namespace StudyDotNet.DataList
{
/// <summary>
/// DataList_DataGrid 的摘要说明。
/// </summary>
public class DataList_DataGrid : System.Web.UI.Page
{
#region 控件申明区域
protected System.Web.UI.WebControls.DataList DataList1;
#endregion
#region Page_Load
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!Page.IsPostBack)
{
DataList1.DataSource = CreateDataSource();
DataList1.DataBind();
}
} #endregion #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataList1.ItemCommand += new System.Web.UI.WebControls.DataListCommandEventHandler(this.DataList1_ItemCommand);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion #region 数据源
public DataTable CreateDataSource()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Sex");
dt.Columns.Add("Age");
dt.Rows.Add(new object[] {"顺治","男","45"});
dt.Rows.Add(new object[] {"康熙","男","7"});
dt.Rows.Add(new object[] {"雍正","男","62"});
dt.Rows.Add(new object[] {"乾隆","男","18"});
return dt;
} public DataTable CreateDataSource(string Name)
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Sex");
dt.Columns.Add("Age");
if(Name=="顺治")
{
dt.Rows.Add(new object[] {"小顺治0","男","4"});
dt.Rows.Add(new object[] {"小顺治1","男","17"});
dt.Rows.Add(new object[] {"小顺治2","男","20"});
dt.Rows.Add(new object[] {"小顺治3","男","18"});
}
if(Name=="康熙")
{
dt.Rows.Add(new object[] {"小康熙0","男","4"});
dt.Rows.Add(new object[] {"小康熙1","男","17"});
dt.Rows.Add(new object[] {"小康熙2","男","20"});
dt.Rows.Add(new object[] {"小康熙3","男","18"});
dt.Rows.Add(new object[] {"小康熙4","男","18"});
}
if(Name=="雍正")
{
dt.Rows.Add(new object[] {"小雍正0","男","4"});
dt.Rows.Add(new object[] {"小雍正1","男","17"});
dt.Rows.Add(new object[] {"小雍正2","男","20"});
dt.Rows.Add(new object[] {"小雍正3","男","18"});
}
if(Name=="乾隆")
{
dt.Rows.Add(new object[] {"小乾隆0","男","4"});
dt.Rows.Add(new object[] {"小乾隆1","男","17"});
dt.Rows.Add(new object[] {"小乾隆2","男","20"});
}
return dt;
} #endregion #region DataList1的事件
private void DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
bool booVisible;
if (e.CommandName == "One")
{
booVisible =((Panel)e.Item.FindControl("Panel1")).Visible;
((Panel)e.Item.FindControl("Panel1")).Visible =!booVisible;
}
}
public void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string strTem="";
if(e.Item.ItemType == ListItemType.Item ||e.Item.ItemType ==ListItemType.AlternatingItem)
{
strTem += "二层按钮事件发生:";
strTem += "<br>行号 = " + e.Item.ItemIndex.ToString();
strTem += "<br> 姓名 = " + e.Item.Cells[0].Text.ToString();
//输出结果
Response.Write(strTem);
//弹出对话框
strTem = strTem.Replace("<br>","\\r\\n");
Page.RegisterStartupScript("","<script language=javascript> alert('" + strTem + "')</script>");
}
}
#endregion
}
}