树型DataGrid的思路

最近一直很忙,很久没来博客园写点什么东西了,难得今天有时间,我就写写树型DataGrid的思路吧!

虽然现在vs2005 都出来那么久了,可能都没多少人在用DataGrid了,但是我还是想写写这个东西,也算是一个经验的小结,还可以为要做这种功能的人提供点帮助。

最近在项目中使用到了树型的可折叠的DataGrid,要求要是无刷新的那种树型DataGrid,那就是说要在客户端执行树的折叠和展开。
形状类似这样:

+1     field1   field2...
-2     field1   field2...
  -3   field1   field2...
  -4   field1   field2...
    -5 field1   field2...
    -6 field1   field2...
+7     field1   field2...
......................
如图:Demo.JPG

还要是无限级展开的,对其只需要配置子字段名和父字段名即可。

由于时间紧,本打算在网上找适合的DataGrid控件,但是找了很久还是没有找到符合要求的,没想到.NET都出来都那么久了还是没人说说这种控件是怎么做!最后,我就只有自己做这个控件了。

下面大概说一下具体作的思路:

说说大体思路,既然是DataGrid那肯定是继承于System.Web.UI.WebControls.DataGrid的,我采用的是通过

JavaCript实现对DataGrid中特定的域(也就是特定的行进行隐藏),对于DataGrid中的树是使用给用户给的

数据源DataTable 加上一列,即树形列。JavaScript的函数主要有两个,一个ChangeImage(...)用于点击树节

点图片后的改变,collapRexpand(...)用于展开或者收拢。

详细思路:
1.自己建一个Web服务器控件继承System.Web.UI.WebControls.DataGrid
2.添加属性 子节点,父节点,以及其他你需要的属性
3.指定Tree的图片路径,一般使用IEWebControl里面的TreeView的图片
4.写JavaScript的函数 ChangeImage(...)用于点击树节点图片后的改变,collapRexpand(...)用于展开或者收拢
5.自己写绑定DataGrid的函数,而不是用原来的那个DataSource,该函数只要实现绑定你新添加的那个树形列
6.树形列是在另外一个函数里实现,那个函数主要实现树的构造,即生成树形。对于子节点要一次望父节点后面靠。对于这里我说明一下:要先计算出该节点是否为子节点,而且要通过递归计算出该节点所在的层数,然后就可以得到该节点需要网父节点后靠多少。
7.呈现控件

本人水平有限只能就写成这样,有不理解需要帮助的朋友说声,我定会尽力解答!!!

posted @ 2007-01-18 19:31  Hermes.Liu  阅读(1780)  评论(3编辑  收藏  举报