Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何将DataGridView值中的复选框列设置为true_Vb.net_Checkbox_Datagridview - Fatal编程技术网

Vb.net 如何将DataGridView值中的复选框列设置为true

Vb.net 如何将DataGridView值中的复选框列设置为true,vb.net,checkbox,datagridview,Vb.net,Checkbox,Datagridview,各位 我一直在寻找解决以下挑战的方法 我得到了一个带有未绑定datagridview的表单,dg增加了一列,允许用户选择要使用的方法。 事件的状态存储在数据库中,重新打开表单后,代码检查事件是否处于“打开”状态,如果是,则将以前选择的方法与datagrid中的方法进行比较,并应将以前激活的方法设置为“选定”方法 然而,我似乎无法让它工作不幸的是 下面的代码循环遍历dg中的方法并比较值,如果它满足methodID,则应将值设置为“True”或TrueValue 如果数据库检查返回true,并且在表

各位

我一直在寻找解决以下挑战的方法

我得到了一个带有未绑定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