DataGrid的事件响应的问题(给分300,高手请进)

时间:2021-05-20 19:36:43
问题是这样的:

此问题来源于我要实现DataGrid中的行的展开(点击DataGrid的某行的LinkButton,此行的详细信息的DataGrid会插入此行),并且可以逐级深入。

我已经实现了在一个基础DataGrid中,用程序嵌套生成新的DataGrid,也就是DataGrid套DataGrid,这是用程序递归生成的。
生成每个DataGrid时我已经用“AddHandler DGDigTo.ItemCommand, AddressOf DG_ItemCommand”定义了响应事件。
并且用 DGDigTo.Attributes.Add("Level", n)定义了一个新的属性“Level”用于描述新DataGrid的层次。

问题是对应于第二、第三层DataGrid中的LinkButton的触发事件,我如何得到的触发此事件的DataGrid的ID号和自定义属性?
因为在DG_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)中得到的ID或Parent.ID均为空。或者e.Item.Attributes("Level")也为空。这导致了我对第二层以后的DataGrid不可控,也就是我没有办法知道是那个DataGrid触发了此事件,并且它的属性是什么,从而无法组织下层数据。

此问题比较麻烦,望高手给予回复。

8 个解决方案

#1


up

#2


好象你这种情况使用datagrid并不合适。
DATAGRID还是比较消耗资源的。
你还不如采用一些高性能的树形结构生成办法,结合StringBuilder来处理你的问题。

#3


用DataGrid我觉得是适用的,尤其在我的应用中基本上所有的功能都实现了,仅剩此项。
我认为只要能得到响应事件的DG的ID就能完成我的需求,只是现在可以得到ClientID,但Server端的ID号我得不到。

#4


你用sender.parent.clientID试试看,通过这个你可以提取DG下面的一些有用的信息,比如行、列、控件,等等!
我没有你的代码,无法给你更详细的说明了!
sender是你的DG中的LinkButton的自定义事件的sender。

#5


得到的东东是个类似“dg1__clt1__clt1....”的东东,你要解析一下!对比此时的html页面的sourcecode,你可以看到也许是你要的东西。

#6


你说的ClientID我也已经在用了,看我的第四篇回复。我不知为何得不到本身定义的ID。
但是即使我可以用那些信息,要定位这个DG在什么位置也会很辛苦。
ClientID将你定义的DG的ID融合到他的结构里面了。
类似于你定义了两个DG:一个叫DG1-3-2,另一个叫DG2-2-2,
然后你触发DG2-2-2的一个LinkButton事件,得到e.Item.ClientID为以下的值
DataGrid1__ctl6_DG1-3-2__ctl4_DG2-2-2__ctl2
为了得到这个DG,还要先定位DataGrid中的Cell用FindControl找到DG1-3-2,
再定位DG1-3-2中的Cell用FindControl找到DG2-2-2。
这样的话,对我的深层次的展开处理很麻烦,我觉得应该可以有比较简单的办法的。
可以通过ID一步得到想要的DG,这样效率也高,出错的机会也会很小。

#7


没有什么好方法解决此问题,通过ClientID虽可以做,但是很麻烦,效率也低。
不过spring_ok 、 yohomonkey 毕竟参与了讨论,故将分数给出。

#8


你也许还可以通过js的方式来提取button对象,用脚本试试。

#1


up

#2


好象你这种情况使用datagrid并不合适。
DATAGRID还是比较消耗资源的。
你还不如采用一些高性能的树形结构生成办法,结合StringBuilder来处理你的问题。

#3


用DataGrid我觉得是适用的,尤其在我的应用中基本上所有的功能都实现了,仅剩此项。
我认为只要能得到响应事件的DG的ID就能完成我的需求,只是现在可以得到ClientID,但Server端的ID号我得不到。

#4


你用sender.parent.clientID试试看,通过这个你可以提取DG下面的一些有用的信息,比如行、列、控件,等等!
我没有你的代码,无法给你更详细的说明了!
sender是你的DG中的LinkButton的自定义事件的sender。

#5


得到的东东是个类似“dg1__clt1__clt1....”的东东,你要解析一下!对比此时的html页面的sourcecode,你可以看到也许是你要的东西。

#6


你说的ClientID我也已经在用了,看我的第四篇回复。我不知为何得不到本身定义的ID。
但是即使我可以用那些信息,要定位这个DG在什么位置也会很辛苦。
ClientID将你定义的DG的ID融合到他的结构里面了。
类似于你定义了两个DG:一个叫DG1-3-2,另一个叫DG2-2-2,
然后你触发DG2-2-2的一个LinkButton事件,得到e.Item.ClientID为以下的值
DataGrid1__ctl6_DG1-3-2__ctl4_DG2-2-2__ctl2
为了得到这个DG,还要先定位DataGrid中的Cell用FindControl找到DG1-3-2,
再定位DG1-3-2中的Cell用FindControl找到DG2-2-2。
这样的话,对我的深层次的展开处理很麻烦,我觉得应该可以有比较简单的办法的。
可以通过ID一步得到想要的DG,这样效率也高,出错的机会也会很小。

#7


没有什么好方法解决此问题,通过ClientID虽可以做,但是很麻烦,效率也低。
不过spring_ok 、 yohomonkey 毕竟参与了讨论,故将分数给出。

#8


你也许还可以通过js的方式来提取button对象,用脚本试试。