http://dotnet.aspx.cc/ShowDetail.aspx?id=149E5DD7-3B32-461e-ACC6-51D1652E6746

解决方案 »

  1.   

    我试过可以第一层绑定象平常一样
    第二层的绑定主要是在第一层的DataGrid的ItemDataBound里面做以下操作
    先建一个DataSet
    把要绑定的数据放到DataSet里面
    然后执行第二层的DataGrid的DataBind();
    这样就可以了
      

  2.   

    哇,好复杂,都傻掉了...还是ASP简单~~~~...
      

  3.   

    同意  zjblue(不路)的思路!
      

  4.   

    看看这个,比较容易懂!
    http://www.dotnetjunkies.com/Tutorial/47792CB0-0990-4BD8-BF84-B6063C4C9BBC.dcik
      

  5.   

    这个需要嵌套吗?
    直接生成一个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;
    }
    //更改后得出你的结果
      

  6.   

    下面是我用ASP的思想写的代码,没有用到DataGrid,请问,两者在运行效率上有什么差别?private void Page_Load(object sender, System.EventArgs e)
    {
    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();
    }
      

  7.   

    昨天作了个DataList嵌套DataGrid的例子。
    对你应该有用
    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>
      

  8.   

    后置代码:
    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 
    }
    }