• 全部
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
  • 问答

如何获得Web应用下DataGrid控件中自定义的模板列内checkbox控件的值?

cwq888 2002-09-20 05:40:08
我用VB.NET制作Web应用程序,有一页用了一个Web窗体的DataGrid控件。
在DataGrid中我定义了2列绑定到数据库的字段,另外还有1个模板列,在此模板列中的ItemTemplate里面我设置了一个WebControls.CheckBox。
程序运行时表格的数据显示与分页都很正常,每页10行,每行也都有1个CheckBox。
使用下列代码,cb.Checked老是得到程序设置的默认值,无法随用户的选择而变。
Dim cb As System.Web.UI.WebControls.CheckBox
Dim i As Int16
For i = 0 To DataGrid1.Items.Count - 1



cb = CType(DataGrid1.Items(i).Cells(0).FindControl("CheckBox1"), System.Web.UI.WebControls.CheckBox)
If cb.Checked Then
Dim th As Int64 = Val(DataGrid1.Items(i).Cells(1).Text)
End If
Next
那么我怎么知道用户选中了DataGrid中的哪几行呢?也就是说,到底哪些CheckBox的Checked为True呢。
我该怎么解决这个问题?或者有什么替代方法呢?请高手指点!
...全文
25 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kuailexq2000 2002-09-26
o!?不理解?我没做过web/datagrid
应用程序就是把checkbos.value赋值到grid.martrixtext(对应的单元格)
可以解释一下什么是“模版列”吗?thank you!
回复
cwq888 2002-09-26
我把语句
AddHandler DataGrid1.ItemCommand, New System.Web.UI.WebControls.DataGridCommandEventHandler(AddressOf DataGrid1_ItemCommand)
添加到page_load的第一句,
仍然无法捕获用户选择事件。
我真不明白,为什么数据网格的模版列中的checkbox.checked老是得到程序设置的默认值,无法随用户的选择而变?
这是否是vb.net的一个bug?
回复
Latitude 2002-09-25
你写的代码一般是写在page_load里的。
你再写一下如下事件,参数如果有误当然以自动生成的为准,我记性也不是那么好的:
sub DataGrid_ItemCommand(sender As Object, e As DataGridCommandEventArgs)
'把响应事件写在这里就可以了
 '比如在网页上有一个checkbox为check1,看看你是不是可以通过选中datagrid中的一个checkbox来决定它的状态
check1.checked=e.Item.Cells(3).Controls(0).checked
end sub

---
我说的解决方法,通常是用来解决buttoncolumn的,不知道适不适合你用。先试试吧。templatecolumn也许有新的问题。
Good Luck!
by Henry
回复
cwq888 2002-09-25
To Latitude(Henry):谢谢您的答复。
我修改了Page_Init过程为

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
AddHandler DataGrid1.ItemCommand, New System.Web.UI.WebControls.DataGridCommandEventHandler(AddressOf DataGrid1_ItemCommand)

End Sub

但仍然无法捕获check事件。
如果这种方法可行的话,是不是用户每对checkbox选择一次,就要把页面发送一次呢?
真是这样的话,是否会对服务器造成很大的负担?

我的意思是这个页面是一个搜索结果列表。用户可以从这些结果中选择多个,再点击“确定”按钮,发送给服务器。
回复
startexcel 2002-09-24
up
回复
Latitude 2002-09-24
知道了,你缺少了一个事件去接受用户的选中与否的响应。
在web form的datagrid具体做法应该与下贴有相似之处:
http://www.csdn.net/expert/topic/972/972192.xml
主要是借鉴一下怎样添加响应的方法:
AddHandler myColumn.TextBox.KeyDown, New KeyEventHandler(AddressOf MyKeyDown)
你需要为DataGrid_ItemCommand加一个事件的handler
当用户单击checkbox时发生。
这个事件接受的是DataGridCommandEventArgs 类型的e, 你可以通过e.Item.ItemIndex 去标明选中了哪一行.
大致的代码是在初始化datagrid时加一句:

AddHandler DataGrid1.ItemCommand , New System.Web.UI.WebControls.DataGridCommandEventHandler(AddressOf DataGrid1_ItemCommand)


I'm sorry,我的系统网络服务失灵,调不了web form的代码,我只能先说。你试一下,有问题再回复。我会尽快重装一下机器试试看。

----
Good Luck!
by Henry

回复
发帖
VB
创建于2007-09-28

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2002-09-20 05:40
社区公告
暂无公告