树型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...
......................
如图:
还要是无限级展开的,对其只需要配置子字段名和父字段名即可。
由于时间紧,本打算在网上找适合的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.呈现控件
本人水平有限只能就写成这样,有不理解需要帮助的朋友说声,我定会尽力解答!!!