效果类似于:
AAA
  aaa1
  aaa2
  aaa3
BBB
  bbb1
CCC
  ccc1
  ccc2
  ccc3
  ccc4
二级主从,要求里面和外面的datagrid都实现分页 。
搞了几个星期没搞店,郁闷死了,主要是分页问题 ,有谁弄过指点指点呀,用别的方法也行,
相同效果就行。

解决方案 »

  1.   

    用gridview,不用写代码就能搞得定.datagrid没怎么用过,不敢说.
      

  2.   

    用自定义web控件轻松实现,下面贴个例子~
      

  3.   

    单独的datagrid分页,我弄过,不知道这样嵌套能不能行!!!
    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
       {  
    DataGrid1.CurrentPageIndex=e.NewPageIndex;//这是分页效果!!!
    //如果你的数据是从数据库中查询出来的,在着再次调用查询,因为分页的时候刷新页面原来查询的内容会丢失,所以在这再次查询,才能够在第二页上看到数据

       }
    datagrid的分页就这样了.别的帮不上了
      

  4.   

    首先是web用户控件:<%@ Control Language="c#" AutoEventWireup="false" Codebehind="DataGrid嵌套DataGrid_C.ascx.cs" Inherits="bsTest2005_8_16.Samples.DataGrid嵌套DataGrid_C" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
    <asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True" PageSize="3"></asp:DataGrid>
    *************************************
    namespace bsTest2005_8_16.Samples
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; /// <summary>
    /// DataGrid嵌套DataGrid_C 的摘要说明。
    /// </summary>
    public class DataGrid嵌套DataGrid_C : System.Web.UI.UserControl
    {
            protected System.Web.UI.WebControls.DataGrid DataGrid1; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    }        public string DataParentID
            {
                get
                {
                    if(ViewState[this.ClientID + "_ParentID"] !=null)
                        return ViewState[this.ClientID + "_ParentID"].ToString();
                    else
                        return string.Empty;
                }
                set
                {
                    ViewState[this.ClientID + "_ParentID"] = value;
                    this.BindGrid(value);
                }
            }        private void BindGrid(string parentID)
            {
                //这里只是模拟一些测试数据,实际应用是根据parentID从数据库读取数据
                DataTable dt1 = new DataTable();
                dt1.Columns.Add("id");
                dt1.Columns.Add("name");
                dt1.Columns.Add("author");
                dt1.Columns.Add("re");
                
                for(int i=1;i<20;i++)
                    dt1.Rows.Add(new object[]{i,"AAA"+i.ToString(),"BBB"+i.ToString(),(i*i).ToString()});
               
                this.DataGrid1.DataSource = dt1;
                this.DataGrid1.DataBind();
            }
            
            private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
            {
                this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
                this.BindGrid(this.DataParentID);
            }
    #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.Load += new System.EventHandler(this.Page_Load);        }
    #endregion       
    }
    }
      

  5.   

    http://www.codeproject.com/aspnet/GridViewInsideGridView.asp
    这个应该是你想要的结果吧
      

  6.   

    然后是主页面:
    <%@ Register TagPrefix="uc1" TagName="DataGrid嵌套DataGrid_C" Src="DataGrid嵌套DataGrid_C.ascx" %>
    <%@ Page language="c#" Codebehind="DataGrid嵌套DataGrid.aspx.cs" AutoEventWireup="false" Inherits="bsTest2005_8_16.Samples.DataGrid嵌套DataGrid" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>DataGrid嵌套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">
    <form id="Form1" method="post" runat="server">
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"
    AllowPaging="True" PageSize="5" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <uc1:DataGrid嵌套DataGrid_C id="DataGrid嵌套DataGrid_C1" runat="server"></uc1:DataGrid嵌套DataGrid_C>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </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 bsTest2005_8_16.Samples
    {
    /// <summary>
    /// DataGrid嵌套DataGrid 的摘要说明。
    /// </summary>
    public class DataGrid嵌套DataGrid : System.Web.UI.Page
    {
            protected System.Web.UI.WebControls.DataGrid DataGrid1;
        
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
                if(!IsPostBack)
                {
                    this.BindGrid();
                }
    }
            private void BindGrid()
            {
                //这里只是模拟一些测试数据,实际应用是从数据库读取主表数据
                DataTable dt1 = new DataTable();
                dt1.Columns.Add("id");
                dt1.Columns.Add("name");
                dt1.Columns.Add("author");
                dt1.Columns.Add("re");
                
                for(int i=1;i<20;i++)
                    dt1.Rows.Add(new object[]{i,"AAA"+i.ToString(),"BBB"+i.ToString(),(i*i).ToString()});
               
                this.DataGrid1.DataSource = dt1;
                this.DataGrid1.DataBind();
            }
            private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
            {
                if(e.Item.ItemIndex>-1)
                {
                    DataRowView tmp = e.Item.DataItem as DataRowView;
                    string dataParentID = tmp["id"].ToString();                DataGrid嵌套DataGrid_C ctol = e.Item.Cells[0].Controls[1] as DataGrid嵌套DataGrid_C;
                    ctol.DataParentID = dataParentID;
                }
            }        private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
            {
                this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
                this.BindGrid();
            }
    #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       
    }
    }
      

  7.   

    孟子E章:利用Repeater控件显示主-从关系数据表 
    http://dotnet.aspx.cc/ShowDetail.aspx?id=54F4C732-AAE2-4135-FB1B-7B4B613BAA33
      

  8.   

    to:Eddie005在你的引导下,困绕我两个多星期的问题终于搞店了,终于搞店了,
    搞的我前两天的世界杯都没心情看,555555555555