我有一个表结构是
id  name  pid 
1   硬件   0
2   主板   1
3   CPU    1
4   软件   0
5   杀毒   4
6   Word   4请问如何用datagrid 中嵌套  datagrid显示如下效果?硬件
    主板
    CPU
软件
    杀毒
    Word

解决方案 »

  1.   

    很简单, private void dsBigclass_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    DataList dsSmallclass = (DataList)e.Item.FindControl("dsSmallClass");
    DataRow[] dr = dtSmalllist.Select("enable=1 and BigClass_ID="+this.dsBigclass.DataKeys[e.Item.ItemIndex].ToString());
    DataTable dtNewlist = dtSmalllist.Clone();
    for(int i = 0 ; i < dr.Length ; i ++)
    {
    dtNewlist.ImportRow(dr[i]);
    }  
    dsSmallclass.DataSource = dtNewlist; 
    dsSmallclass.DataBind();
    }
    }
      

  2.   

    在datagrid中加一个模版列,添加一个DataGrid控件到模版列里面然后在写它的ItemDataBound事件代码就ok了
      

  3.   

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

  4.   

    使用DataList嵌套实现更方便
    aspx 代码:
    <asp:datalist id="DataList1" runat="server" CellSpacing="2" RepeatColumns="3" Width="80%">
    <ItemTemplate>
    <table width="100%" border="0" align="center">
    <tr>
    <td><a href="#"><strong><font color="#0033cc"><a href='default2.aspx?id=<%# DataBinder.Eval(Container.DataItem, "id") %>'><%# DataBinder.Eval(Container.DataItem, "type_name") %></a></font></strong></a></td>
    <td>&nbsp;</td>
    </tr>
    <tr>
    <td colspan="2" align="center"><!--子DAALIST-->
    <asp:DataList id="list2" runat="server" Width="100%" CellSpacing="2" RepeatDirection="Horizontal">
    <ItemTemplate>
    <table width="100%" cellspacing="0" cellpadding="1" style="FONT-SIZE: 13px">
    <tr>
    <td>
    <a href="#"><font color="#0033cc"><a href='default1.aspx?id=<%# DataBinder.Eval(Container.DataItem, "id") %>'>
    <%# DataBinder.Eval(Container.DataItem, "type_name")%>
    </a></font></a>
    </td>
    </tr>
    </table>
    </ItemTemplate>
    </asp:DataList>
    </td>
    </tr>
    </table>
    </ItemTemplate>
    </asp:datalist>后台代码:
    private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    string sqlSel,str;
    int i,i2,i9;
    DataList list2 = new DataList();
    list2  = (DataList)e.Item.FindControl("list2");
    i9=this.Hidden1.Value.Length;
    string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();//根据父list绑定子list,得到父list得该行的id
    // sqlSel =  "select top 2* from tab_product_type2 where  parent_code = '"+finishid+"' order by type_order asc";
    if (this.Hidden3.Value !="2")//对子类的绑定进行处理
    {
    if ((this.Hidden1.Value =="") || (i9<3))
    {
    sqlSel =  "select top 2* from tab_product_type2 where  parent_code = '"+finishid+"' order by type_order asc";
    DataSet objdata2 =new DataSet();
    objdata2=data1.dbbind(sqlSel);
    list2.DataSource =SetType(sqlSel);
    list2.DataBind();
    }
    else
    {
    sqlSel="select count(id) from tab_product_type2 where id in ("+this.Hidden1.Value+") and  parent_code = '"+finishid+"'";
    str=data1.readout (sqlSel,0);
    i=System.Convert.ToInt16 (str);
    if (i>2)
    {
    list2.DataSource=BindChild(this.Hidden1.Value,finishid,0);
    list2.DataBind ();
    //sqlSel="select count(id) from tab_product_type2 where id ("+this.Hidden1.Value+") and  parent_code = '"+finishid+"' order by type_order asc";
    }
    else
    {
    i=2-i;
    list2.DataSource=BindChild(this.Hidden1.Value,finishid,i);
    list2.DataBind ();
    }
    }
    }
    else//为父类
    {
    DataList list = new DataList();
    list  = (DataList)e.Item.FindControl("list");
    finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();//根据父list绑定子list,得到父list得该行的id
    sqlSel =  "select top 2* from tab_product_type2 where  parent_code = '"+finishid+"' order by type_order asc";
    DataSet objdata2 =new DataSet();
    objdata2=data1.dbbind(sqlSel);
    list.DataSource =SetType(sqlSel);//获取数据源
    list.DataBind();
    }
    }
      

  5.   

    可以参考一下DataList的嵌套
    http://blog.csdn.net/sunnystar365/archive/2005/10/25/516292.aspx
      

  6.   

    作了个小小demo
    -----------------前台aspx---------------------
    <asp:datagrid id="DataGrid1" runat="server" AllowPaging="True" ShowFooter="True">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Button id="Button2" runat="server" Text="添加" CommandArgument="addBtn"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Button id="Button3" runat="server" Text="删除" CommandArgument="delBtn"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Button id="Button4" runat="server" Text="更新" CommandArgument="updateBtn"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn Visible="False">
    <ItemTemplate>
    <asp:DataGrid id="DataGrid2" runat="server" OnItemCommand="DataGrid2_ItemCommand">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Button id="Button5" runat="server" Text="添加" CommandArgument="addBtn"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Button id="Button6" runat="server" Text="删除" CommandArgument="delBtn"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Button id="Button7" runat="server" Text="更新" CommandArgument="updateBtn"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    <PagerStyle NextPageText="" PrevPageText=""></PagerStyle>
    </asp:datagrid>
    ------------------------------------------
      

  7.   

    ------------------后台----------------------
    private void Page_Load(object sender, System.EventArgs e)
    {
    string cmdStr="Select * from Employees";
    SqlCommand cmd = new SqlCommand(cmdStr,conn);
    SqlDataAdapter ad = new SqlDataAdapter();
    ad.SelectCommand=cmd;
    ad.Fill(ds);
    if(!Page.IsPostBack)
    {
    DataGrid1.DataSource=ds;
    DataGrid1.DataBind();
    }private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    //TextBox textBox= (TextBox)e.Item.FindControl("TextBox1");
                DataGrid dg=(DataGrid)e.Item.FindControl("DataGrid2");
    if(dg!=null)
    {
    dg.DataSource=ds;
    dg.DataBind();
    }

    }
    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    DataGrid dg=(DataGrid)e.Item.FindControl("DataGrid2");
    }
    public void DataGrid2_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //此处可以处理内层DataGrid!
    }
      

  8.   

    http://singlepine.cnblogs.com/articles/312975.html