现有一数据库表,结构为:
科目码、科目名称、计划金额、实际支出金额、剩余金额。其中数据有主从关系,但不明确,比如说:
404-1402   10000   5000  5000
404-1402-1-2   300  100 200
404-1402-1-2-1 50 15 35
科目编码由8部分组成,每部分可由8位数字组成,没有特别的命名规则。
我现在绑定到datagrid上时,为所有的科目,但一共有5000记录,这样页面美观不太好。想实现类似论坛的效果,就是在datagird中只显示一级科目,当单击前面的加号时,显示该科目的二级科目,依次类推。动态加载不同的级数。我想用datagrid嵌套datagrid的问题来实现,不知是否可行?有更好的办法吗?或控件也行

解决方案 »

  1.   

    把里面的Datagrid的DataSource用一个函数得到,那个参数由外面的DataGrid绑定的数据项提供。
    行不??
      

  2.   

    see an example hereHierarchical Data and the ASP.NET DataGrid
    http://www.dotnetjunkies.com/Tutorial/841522C9-FFBD-4C57-BD48-F62B55057FF3.dcikorBuilding a Master/Detail DataGrid Part II
    http://www.dotnetjunkies.com/Tutorial/9079F8C8-0927-4A1C-9A37-B1B9E529C526.dcik
      

  3.   

    用第三方控件吧,如:NetAdvantageAspNET33 很容易就解决了。
      

  4.   

    哪里有得下载?有的话发到我的邮箱[email protected]好吗?谢谢了。
      

  5.   

    模板列的方法:
    1 在 DataGrid 上右击,选 "属性生成器",再选“列”,然后添加一个模板列。
    2 在 DataGrid 上右击, 选 “编辑模板列”,编辑刚才创建的模板列,在 SelectItemTemplate 中放置一个 DataGrid
    3 在 DataGrid 中添加一个“选择”按钮列,在其选择事件中添加代码为刚才新建的 DataGrid 绑定数据源
      

  6.   

    前台
    <%@ Register TagPrefix="ew" Namespace="eWorld.UI" Assembly="eWorld.UI, Version=1.7.0.0, Culture=neutral, PublicKeyToken=24d65337282035f2" %>
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="lefttop2.aspx.vb" Inherits="OA.lefttop"%>
    <%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls" %>
    <HTML>
    <HEAD>
    <title></title>
    <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
    <meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body bgColor="#ffffff" background="../image/mainBackground.gif">
    <form id="Form1" runat="server">
    <TABLE id="Table1" style="WIDTH: 240px; HEIGHT: 415px" cellSpacing="1" cellPadding="1"
    width="240" border="0">
    <tr>
    <td style="HEIGHT: 135px" colSpan="2"><asp:calendar id="Calendar1" runat="server" CellPadding="1" BorderColor="#3366CC" ForeColor="#003399"
    DayNameFormat="FirstLetter" BorderWidth="1px" Font-Size="8pt" Font-Names="Verdana" BackColor="White" Height="112px" Width="232px">
    <TodayDayStyle ForeColor="White" BackColor="#99CCCC"></TodayDayStyle>
    <SelectorStyle ForeColor="#336666" BackColor="#99CCCC"></SelectorStyle>
    <NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF"></NextPrevStyle>
    <DayHeaderStyle Height="1px" ForeColor="#336666" BackColor="#99CCCC"></DayHeaderStyle>
    <SelectedDayStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedDayStyle>
    <TitleStyle Font-Size="10pt" Font-Bold="True" Height="25px" BorderWidth="1px" ForeColor="#CCCCFF"
    BorderStyle="Solid" BorderColor="#3366CC" BackColor="#003399"></TitleStyle>
    <WeekendDayStyle BackColor="#CCCCFF"></WeekendDayStyle>
    <OtherMonthDayStyle ForeColor="#999999"></OtherMonthDayStyle>
    </asp:calendar>
    </td>
    </tr>
    <TR>
    <TD style="WIDTH: 185px; HEIGHT: 7px" vAlign="top" bgColor="#e0e0e0"><asp:label id="Label1" runat="server" Font-Size="X-Small" Font-Names="Arial">分组设置</asp:label></TD>
    <td style="HEIGHT: 7px" vAlign="top" bgColor="#e0e0e0"><asp:imagebutton id="ImageButton1" runat="server" ImageUrl="../image/upArrow.gif"></asp:imagebutton><asp:imagebutton id="ImageButton2" runat="server" ImageUrl="../image/downArrow.gif"></asp:imagebutton></td>
    </TR>
    <TR>
    <TD vAlign="top" bgColor="gainsboro" colSpan="2"><asp:datalist id=DataList1 runat="server" Width="100%" DataKeyField="range" DataSource="<%# DataTable1 %>">
    <ItemTemplate>
    <FONT face="宋体"></FONT><FONT face="宋体"></FONT>
    <ew:CollapsablePanel id=CollapsablePanel1 runat="server" Font-Names="Arial" Font-Size="X-Small" BorderColor="White" width="100%" ExpandImageUrl="../image/collaps.bmp" CollapseImageUrl="../image/expand.bmp" BorderStyle="Solid" TitleLinkStyle-Font-Names="Arial" TitleStyle-Font-Names="Arial" TitleStyle-Font-Size="X-Small" TitleStyle-BackColor="#FFFFCC" Collapsed="True" CollapserAlign="Left" ShowLinkOrImage="True" TitleText='<%# DataBinder.Eval(Container.DataItem,"range") %>'>
    <asp:DataList id=DataList2 runat="server" Width="100%" DataKeyField="infor_type" datasource='<%# DataBinder.Eval(Container, "DataItem.myrelation1") %>'>
    <ItemTemplate>
    <FONT face="宋体"></FONT><FONT face="宋体"></FONT>
    <ew:CollapsablePanel id="Collapsablepanel2" runat="server" BorderColor="White" Font-Size="X-Small" Font-Names="Arial" TitleText='&nbsp;<%# DataBinder.Eval(Container.DataItem,"infor_type") %>' ShowLinkOrImage="True" CollapserAlign="Left" Collapsed="True" TitleStyle-BackColor="#FFFFCC" TitleStyle-Font-Size="X-Small" TitleStyle-Font-Names="Arial" TitleLinkStyle-Font-Names="Arial" BorderStyle="Solid" CollapseImageUrl="../image/expand.bmp" ExpandImageUrl="../image/collaps.bmp" width="100%">
    <asp:DataList id="Datalist3" runat="server" datasource='<%# DataTable3 %>' DataKeyField="sr" Width="100%">
    <ItemTemplate>
    <FONT face="宋体"></FONT><FONT face="宋体"></FONT>
    <ew:CollapsablePanel id="Collapsablepanel3" runat="server" BorderColor="White" Font-Size="X-Small" Font-Names="Arial" TitleText='<%# DataBinder.Eval(Container, "DataItem.sr") %>' ShowLinkOrImage="True" CollapserAlign="Left" Collapsed="True" TitleStyle-BackColor="#FFFFCC" TitleStyle-Font-Size="X-Small" TitleStyle-Font-Names="Arial" TitleLinkStyle-Font-Names="Arial" BorderStyle="Solid" CollapseImageUrl="../image/expand.bmp" ExpandImageUrl="../image/collaps.bmp" width="100%">
    <asp:DataList id="Datalist4" runat="server" DataSource="<%# DataTable4 %>" DataKeyField="status" Width="100%">
    <ItemTemplate>
    <FONT face="宋体"></FONT><FONT face="宋体"></FONT>
    <ew:CollapsablePanel id="Collapsablepanel4" runat="server" BorderColor="White" Font-Size="X-Small" Font-Names="Arial" TitleText='<%# DataBinder.Eval(Container, "DataItem.status") %>' ShowLinkOrImage="True" CollapserAlign="Left" Collapsed="True" TitleStyle-BackColor="#FFFFCC" TitleStyle-Font-Size="X-Small" TitleStyle-Font-Names="Arial" TitleLinkStyle-Font-Names="Arial" BorderStyle="Solid" CollapseImageUrl="../image/expand.bmp" ExpandImageUrl="../image/collaps.bmp" width="100%">
    </ew:CollapsablePanel>
    </ItemTemplate>
    </asp:DataList>
    </ew:CollapsablePanel>
    </ItemTemplate>
    </asp:DataList>
    </ew:CollapsablePanel>
    </ItemTemplate>
    </asp:DataList>
    </ew:CollapsablePanel>
    </ItemTemplate>
    </asp:datalist>
    </TD>
    </TR>
    </TABLE>
    </form>
    </body>
    </HTML>
      

  7.   


    后台
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports Microsoft.VisualBasicPublic Class lefttop
              '
            Me.DataColumn6.ColumnName = "sr"
            CType(Me.DataSet_treedata, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.DataTable1, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.DataTable2, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.DataTable3, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.DataTable4, System.ComponentModel.ISupportInitialize).EndInit()    End Sub    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: This method call is required by the Web Form Designer
            'Do not modify it using the code editor.
            InitializeComponent()
        End Sub#End RegionPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            If Not IsPostBack Then
                Dim drowitem As DataRow
                drowitem = Me.DataTable1.NewRow()
                drowitem("range") = "——今天"
                DataTable1.Rows.Add(drowitem)
                drowitem = Me.DataTable1.NewRow()
                drowitem("range") = "——昨天"
                DataTable1.Rows.Add(drowitem)
                drowitem = Me.DataTable1.NewRow()
                drowitem("range") = "——上周"
                DataTable1.Rows.Add(drowitem)            '#####################################################
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "工作联系函"
                drowitem("range") = "——今天"
                DataTable2.Rows.Add(drowitem)
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "会议纪要"
                drowitem("range") = "——今天"
                DataTable2.Rows.Add(drowitem)
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "任务分派"
                drowitem("range") = "——今天"
                DataTable2.Rows.Add(drowitem)            drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "工作联系函"
                drowitem("range") = "——昨天"
                DataTable2.Rows.Add(drowitem)
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "会议纪要"
                drowitem("range") = "——昨天"
                DataTable2.Rows.Add(drowitem)
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "任务分派"
                drowitem("range") = "——昨天"
                DataTable2.Rows.Add(drowitem)            drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "工作联系函"
                drowitem("range") = "——上周"
                DataTable2.Rows.Add(drowitem)
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "会议纪要"
                drowitem("range") = "——上周"
                DataTable2.Rows.Add(drowitem)
                drowitem = Me.DataTable2.NewRow()
                drowitem("infor_type") = "任务分派"
                drowitem("range") = "——上周"
                DataTable2.Rows.Add(drowitem)            '###############################
                drowitem = Me.DataTable3.NewRow()
                drowitem("infor_type") = "工作联系函"
                drowitem("sr") = "收件"
                DataTable3.Rows.Add(drowitem)
                drowitem = Me.DataTable3.NewRow()
                drowitem("infor_type") = "工作联系函"
                drowitem("sr") = "发件"
                DataTable3.Rows.Add(drowitem)            '###################################
                drowitem = Me.DataTable3.NewRow()
                drowitem("infor_type") = "会议纪要"
                drowitem("sr") = "收件"
                DataTable3.Rows.Add(drowitem)
                drowitem = Me.DataTable3.NewRow()
                drowitem("infor_type") = "会议纪要"
                drowitem("sr") = "发件"
                DataTable3.Rows.Add(drowitem)            '###################################
                drowitem = Me.DataTable3.NewRow()
                drowitem("infor_type") = "任务分派"
                drowitem("sr") = "收件"
                DataTable3.Rows.Add(drowitem)
                drowitem = Me.DataTable3.NewRow()
                drowitem("infor_type") = "任务分派"
                drowitem("sr") = "发件"
                DataTable3.Rows.Add(drowitem)         
                Me.DataSet_treedata.Relations.Add("myrelation1", DataSet_treedata.Tables(0).Columns("range"), DataSet_treedata.Tables(1).Columns("range"))
                'Me.DataSet_treedata.Relations.Add("myrelation2", DataSet_treedata.Tables(1).Columns("infor_type"), DataSet_treedata.Tables(2).Columns("infor_type"))
                'Me.DataSet_treedata.Relations.Add("myrelation3", DataSet_treedata.Tables(0).Columns("range"), DataSet_treedata.Tables(1).Columns("range"))
                DataList1.DataSource = DataSet_treedata.Tables(0).DefaultView
                DataList1.DataBind()            'me.DataSet_treedata.Relations.Add("myrelation1",
                'DataList4.DataBind()
            End If
        End SubEnd Class
      

  8.   

    外上面的CollapsablePanel是一个eworld的组件,使datalist可以折叠,要的话把mail发短信给我aspx,datalist 包含datalist
    <asp:datalist id="bordList" Runat="server" CellSpacing="0" CellPadding="2" RepeatColumns="1">
    <ItemStyle Wrap="False"></ItemStyle>
    <ItemTemplate>
    <div class="parent">
    <img id='<%# "i_"+DataBinder.Eval(Container.DataItem, "FunctionGroup_ID") %>' src="<%=Request.ApplicationPath%>/images/tree.gif" border=0><%#DataBinder.Eval(Container.DataItem, "GroupName")%>

    </div>
    <div class="child"   id='<%# "c_"+DataBinder.Eval(Container.DataItem, "FunctionGroup_ID") %>'>
    <asp:DataList id="forumList" RepeatColumns="1" DataSource='<%# getSubData(DataBinder.Eval(Container.DataItem, "FunctionGroup_ID").ToString())%>' Runat="server" CellPadding="2" CellSpacing="0">
    <ItemTemplate>
    <a href='<%=Request.ApplicationPath%>/<%#DataBinder.Eval(Container.DataItem, "Command")%>' target='<%#DataBinder.Eval(Container.DataItem, "target")%>'>
    <img src="<%=Request.ApplicationPath%>/images/leaf2.gif" border="0"><%#DataBinder.Eval(Container.DataItem, "FunctionItemName")%>
    </a>
    </ItemTemplate>
    </asp:DataList>
    </div>
    </ItemTemplate>
    </asp:datalist>
    aspx.cs
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if (!IsPostBack)
    {

       
    dataBind();
    //getParentData();
    }
    } private void dataBind()
    {
    DataSet ds = Function.FunctionGroup.SelectUserGroup(FormsAuth.CurrentUser  );
    bordList.DataSource = ds;
    bordList.DataBind();
    }   public DataSet getSubData(string groupID)
    {
     return Function.Function.SelectUserGroupFunction (groupID,FormsAuth.CurrentUser );
    }
      

  9.   

    http://www.denisbauer.com/ASPNETControls/HierarGrid.aspx