Vb.net 如何将DataGridView值中的复选框列设置为true
各位 我一直在寻找解决以下挑战的方法 我得到了一个带有未绑定datagridview的表单,dg增加了一列,允许用户选择要使用的方法。 事件的状态存储在数据库中,重新打开表单后,代码检查事件是否处于“打开”状态,如果是,则将以前选择的方法与datagrid中的方法进行比较,并应将以前激活的方法设置为“选定”方法 然而,我似乎无法让它工作不幸的是 下面的代码循环遍历dg中的方法并比较值,如果它满足methodID,则应将值设置为“True”或TrueValue 如果数据库检查返回true,并且在表单完全初始化之后,这将被初始化,其中Vb.net 如何将DataGridView值中的复选框列设置为true,vb.net,checkbox,datagridview,Vb.net,Checkbox,Datagridview,各位 我一直在寻找解决以下挑战的方法 我得到了一个带有未绑定datagridview的表单,dg增加了一列,允许用户选择要使用的方法。 事件的状态存储在数据库中,重新打开表单后,代码检查事件是否处于“打开”状态,如果是,则将以前选择的方法与datagrid中的方法进行比较,并应将以前激活的方法设置为“选定”方法 然而,我似乎无法让它工作不幸的是 下面的代码循环遍历dg中的方法并比较值,如果它满足methodID,则应将值设置为“True”或TrueValue 如果数据库检查返回true,并且在表
session.methodID
是返回的LINQ查询中的一个字段
For Each r As DataGridViewRow In dgMethods.Rows
If r.Cells(1).Value = session.methodID Then
Dim c As DataGridViewCheckBoxCell = r.Cells(0)
c.Value = c.TrueValue
End If
Next
不幸的是,这并没有将复选框设置为“Checked”。
循环运行并评估r.Cells(1).Value
和session.methodID
correct和triggers之间的比较
有趣的是,如果我在“CellContentClick”事件之后执行类似的循环,它确实会执行预期的操作。(以下示例将所有复选框值设置为选中)
因此,很明显,仅在dgMethods
上调用循环与触发dgMethods.CellContentClick
事件时的状态有所不同,但我不知道是哪一个?
有很多关于设置复选框列的帖子,但我还没能让它们中的任何一个起作用
有人知道吗
我很感激你的建议?我不确定是否理解你的问题。。。但有一种简单的方法可以检查和更改datagridview中chechbox单元格的状态:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For Each dr As DataGridViewRow In DataGridView1.Rows
If CBool(dr.Cells(0).Value) = True Then dr.Cells(0).Value = False : Continue For
If CBool(dr.Cells(0).Value) = False Then dr.Cells(0).Value = True
Next
End Sub
在本例中,当您为datagridview中的每一行单击此按钮时,将检查checkboxcell并根据其值将值设置为FALSE或TRUE
希望这对你有帮助
再给我一个提示。如果你可以访问他的名字而不是索引的单元格,那么使用他的名字应该可以帮助你避免麻烦;) gdall
在进一步搜索之后,我发现了以下有趣的行为
方法选择过程是名为“frmAddEvent”表单的一部分,使用下面的例程从主表单调用frmAddEvent
表单
创建新表单实例,然后使用名为InitializeForm()
的表单类中的一个公共子类填充该实例,该子类使用GUID参数检索相应的数据以设置表单字段
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.InitializeForm(rsTankName)
newForm.Show()
Else
End If
初始化子项查询多个数据表,并在新表单实例中正确设置相应字段(如果适用)。
该设置的一部分是dgMethods
datagridview中的method
选择
您调用表单的顺序似乎会产生所有差异,因为下面的代码工作得非常完美:
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.Show()
newForm.InitializeForm(rsTankName)
Else
End If
因此,在newForm.Show
事件之后调用newForm.InitializeForm(rsTankName)
允许datagridview正确设置CheckBoxColumn
很可能是因为实际复选框本身仅在Show
命令中实际生成,尽管它作为datagrid中具有DataGridViewCheckBoxColumn属性的单元格“可用”,直接在New frmAddEvent
创建新表单实例之后。在调用newForm.Show
事件之前,不会创建实际复选框及其对应的CheckedState。当复选框被创建用于显示时(在newForm.Show
事件期间),似乎没有与其实际值进行比较
因此,为了在启动新表单时设置复选框列,您必须在设置DataGridViewCheckBoxColumn值之前调用
Show
事件,否则复选框将不会显示为“已选中”。GD Ivan,因为据我所知,DataGridViewCheckBox列不允许布尔“True”或“False”设置。您可以在列设置中设置TrueValue或FalseValue。这是一个字符串变量,而不是布尔值。正如我的OP中所指出的,回路本身是正确的,但点火机制却不正确。请看下面我自己的答案。
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.Show()
newForm.InitializeForm(rsTankName)
Else
End If