我做了一个目录程序,分主次目录,主目录跟次目录都分在同一个数据表里,而主目录的classid字段的值如果为1,而次目录的classmembership字段为1,则这个此目录从属于classid为1的主目录
如下:
classid classname classmembership
  1      甲主目录      0
  2      乙主目录      0
  3      甲次目录      1(这个1为上面甲主目录的classid)
  4      乙次目录      2(这个2为上面乙主目录的classid)
我现在已经利用程序实现了将数据在gridview进行显示,并且将属同一主目录的相同数据的列单元合并成一起
比如
    classmembership classname
                    甲次目录
                    甲次目录                     
                    甲次目录
                    甲次目录
          1         甲次目录
                    甲次目录
                    甲次目录
----------------------------------
                    乙次目录
                    乙次目录                     
                    乙次目录
                    乙次目录
          2         乙次目录
                    乙次目录
                    乙次目录
---------------------------------------这样都没有问题了。现在的问题是前面不要显示为1或2这样的数字ID,我要显示的是其依附的主目录的名字:比如甲主目录,乙主目录这样的文字。
不知道怎么实现我的做法是使用两个dataset,一个dataset是显示次目录数据,一个dataset是从前面一个dataset里取次目录的 classmembership过来做查询参数classid值进行重新查询,取主目录的名字(文字),然后显示在相应的位置,现在是这些数据被我用数组取了过来,我该如何把数组(在后台CS代码里取的)反映在前台代码(后缀名aspx)的dataview里呢?要知道数组是有维数的,就是后面中括号里的变量,传递到前台文件的话又怎么让他递增呢?这是我的思路我估计思路不对,如果你们能实现的话会用什么办法呢?
        

解决方案 »

  1.   

    你描述的好好好好复杂~!
    我都看没下去了,怎么感觉像是你把做树的样子用gridview来实现
      

  2.   

    没看明白你的方法,太麻烦了。看了你的问题,既然1,2都出来了,那你就取数据的时候使用inner join一下不就行了?
      

  3.   

    很简单的需求.呵呵, 硬是让你说复杂了;
    你的这个方法是没错啦...  至于你的dataview的显示问题,建议你还是多看一些书!
      

  4.   

    取数据时用inner join把主目录的classname也查出来,如:SELECT a.*,b.classname
    FROM a INNER JOIN b ON a.classmembership=b.classid合并代码(注意要order by 要合并的字段),绑定时指定合并列的字段为classname,并在ItemDataBound作合并处理
    int row=0;
    private void MyDataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    //合并代码段
    int rowindex = e.Item.ItemIndex;
    if (rowindex - 1 < 0) return;
    if (e.Item.Cells[1].Text == MyDataGrid1.Items[rowindex - 1].Cells[1].Text) //合并第一列
    {
    if (MyDataGrid1.Items[row].Cells[1].RowSpan == 0)
    {
    MyDataGrid1.Items[row].Cells[1].RowSpan++;
    }
    MyDataGrid1.Items[row].Cells[1].RowSpan++;
    e.Item.Cells[1].Visible = false;
    }
    else
    {
    row = rowindex;
    }
    }以上仅供参照...
      

  5.   

    真难为楼主了,写了这么详细的一堆
    “要知道数组是有维数的,就是后面中括号里的变量”:中括号里面的是表示数组长度,不是维数在GridView里面加多一列模板列<asp:TemplateField HeaderText="test">
        <ItemStyle Width="12%" />
             <ItemTemplate>
                <asp:Label ID="lbltest" runat="server"></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>在GridView的OnRowDataBound属性写个函数OnRowDataBound="gwTest_RowDataBound"在这个函数里面根据classmembership的值(既然你实现了,应该都是主目录classid吧)
    去数据库查对应的classname,然后lbltest.text = 查到的值;
    然后在这个函数外把之前的classmembership那一列隐藏了,在把新的模板列的相同单元格合并初学者,做法比较麻烦望高人指教
      

  6.   

    忘记说了我的是DataGrid合并方法,GridView中只要把Item改成Row就行了。