GD All,
我正在四处寻找解决我的挑战的方法。
我有一个带有未绑定数据网格视图的表单,dg有一个添加的列,允许用户选择要使用的方法。 事件的状态存储在数据库中,在重新打开表单后,代码会检查事件是否处于“打开”状态。 state,如果是这样,它将先前选择的方法与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
不幸的是,这并没有将复选框设置为“已选中”。
循环运行并评估r.Cells(1).Value
和session.methodID
之间的比较是否正确并正确触发。
有趣的是,如果我在' CellContentClick'之后做了类似的循环。事件它确实做了预期的事情。 (以下示例将所有复选框值设置为选中)
Private Sub dgMethods_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgMethods.CellContentClick
'Only single selection allowed, so clear table before submitting new selection
For Each r As DataGridViewRow In dgMethods.Rows
Dim c As DataGridViewCheckBoxCell = r.Cells(0)
c.Value = c.TrueValue
Next
dgMethods.CommitEdit(DataGridViewDataErrorContexts.Commit)
End Sub
所以,显然只是在dgMethods
上调用循环和dgMethods.CellContentClick
事件触发时的状态存在差异,但我不知道哪一个?
尝试设置CheckBox列有很多帖子,但我无法让它们工作。
有人有任何想法吗?
我很感激您的建议?
答案 0 :(得分:0)
我不确定你的问题是不正确的...但是有一种简单的方法来检查和更改数据网格视图中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。
希望这会对你有所帮助。
还有一个提示。如果您使用他的名字访问单元格而不是他的索引使用他的名字,它应该可以帮助您避免麻烦;)
答案 1 :(得分:0)
GD All,
在进一步搜索后,我发现了以下有趣的行为。
方法选择过程是名为' frmAddEvent'的表单的一部分,frmAddEvent
表单是使用以下例程从主窗体调用的。
创建新表单实例,然后使用名为InitializeForm()
的表单类中的public sub填充,该表使用GUID参数检索相应的数据以设置表单字段。
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.InitializeForm(rsTankName)
newForm.Show()
Else
End If
初始化子查询多个数据表,并在适当的情况下正确设置新表单实例中的相应字段。
该设置的一部分是method
datagridview中的dgMethods
选项。
看起来你调用表单的顺序会有所不同,因为下面的代码可以完美地运行:
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.Show()
newForm.InitializeForm(rsTankName)
Else
End If
因此,在newForm.InitializeForm(rsTankName)
事件之后调用newForm.Show
允许datagridview正确设置CheckBoxColumn。
可能因为实际的CheckBox本身实际上只是在Show
命令上生成,尽管事实上它是可用的'作为在datagrid中具有DataGridViewCheckBoxColumn属性的单元格,直接在New frmAddEvent
创建新表单实例之后。在调用newForm.Show
事件之前,不会创建实际的CheckBox及其对应的CheckedState。看起来创建CheckBox以进行显示时(newForm.Show
事件期间),没有与其实际值进行比较。
因此,为了在启动新表单时设置Checkbox列,您必须在设置DataGridViewCheckBoxColumn值之前调用Show
事件,否则CheckBox将不会将其显示为' Checked'