我有一个Datagridview,它被设置为readonly并且程序设置为checked / unchecked / indeterminate。 但是,选中和取消选中选项工作正常,但不确定状态根本不起作用。代码示例包含在cellcontentclick处理程序中。
If Not temp_man_pos = Nothing And Not temp_man_neg = Nothing Then
If temp_abweichung <= temp_man_pos And temp_abweichung >= (-(temp_man_neg)) And Not temp_man_pos = Nothing And Not temp_man_neg = Nothing Then
Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = CheckState.Checked
' Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = 1
Else
Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = CheckState.Unchecked
' Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = 0
End If
Else
Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = CheckState.Indeterminate
End If
在Datagridview选项中,True Value手动设置为1,false设置为0,不确定为2,这应该与checkstate.indeterminate相同。
我也尝试使用tristate选项,但.usedefault值在复选框中显示为已选中。
Me.DataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True
Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").ValueType = GetType(TriState)
Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = TriState.UseDefault
真与假价值观虽然很好。
我做错了什么?
答案 0 :(得分:1)
感谢您的回复。
最后我想出来解决这个问题,虽然我对它有点困惑......
<强>问题:强>
我将Threestate设置为true,将不确定值设置为2并尝试按如下代码设置Threestate:
DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = CheckState.Indeterminate
该解决方案未在Datagridview复选框中显示不确定状态,复选框显示为已选中。
<强>解决方案:强>
我将Datagridview值设置如下:
Me.DataGridView1.Rows(x).Cells("KAL_Measuring_Data_Result_1").Value = DBNull.Value
现在,不确定状态显示在Datagridview复选框中!
因此,对Tristate的valuetype没有用,Threestate Value手动设置为2,Checkstate.Indeterminate也是Checkbox值。
有人可以解释这种行为吗?
谢谢大家的帮助,希望我的回答是可以理解的!
答案 1 :(得分:0)
我仍然对什么不起作用感到困惑。我可能错了,但下面的代码可能有助于证明我所描述的内容。在复选框列的ThreeState
属性设置为“False”的情况下:这将只有两(2)个可能的值:false(0)表示false,其他任何数字表示true。即使数字为-1,4,-3,所有这些值都会将检查状态设置为“已检查”,并且唯一的false值为零(0)。
对于复选框列的ThreeState
属性设置为“True”的情况:那么这将具有三(3)个或更多可能的值:零(0)表示false,一(1)对于{和IndeterminateValue
为真,为2(2)。如果值不是0,1或2,则此状态中的任何其他值都将引发错误。两个(2)似乎是Indeterminate的默认值。
使用此选项,如果将复选框列IndeterminateValue
设置为除零(0)或一(1)以外的某个值,则将有4个可能的值。示例:如果设置,则中间值为-1,THEN Zero(0)将为false,1将为true,-1将为Indeterminate值,而Two(2)也将为不确定值。使用下面提供的测试代码,您将看到这种情况。注释掉下面的行,看看当这些值设置为复选框列时会发生什么。
cbCol.ThreeState = True
cbCol.IndeterminateValue = -1
下面的代码演示了当ThreeState
设置为true并且IndeterminateValue
设置为-1时,复选框单元格会在给出时显示一个实心的“Indeterminate”值负一(-1)和二(2)(默认值)。此外,由于ThreeState
设置为true,因此除零(0),一(1),负一(-1)和二(2)以外的任何其他值都将为无效状态引发错误。这可以通过下面第10行中的值来看出,这将引发错误,因为它不是0,1,-1或2.我希望这是有道理的。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetDGVColumns()
FillGrid()
End Sub
Private Sub SetDGVColumns()
DataGridView1.Columns.Add("Name", "Name")
Dim cbCol As DataGridViewCheckBoxColumn = New DataGridViewCheckBoxColumn()
cbCol.ThreeState = True
cbCol.IndeterminateValue = -1
DataGridView1.Columns.Add(cbCol)
End Sub
Private Sub FillGrid()
DataGridView1.Rows.Add("Row1", CheckState.Checked)
DataGridView1.Rows.Add("Row2", CheckState.Unchecked)
DataGridView1.Rows.Add("Row3", CheckState.Indeterminate)
DataGridView1.Rows.Add("Row4", True)
DataGridView1.Rows.Add("Row5", False)
DataGridView1.Rows.Add("Row6", 1)
DataGridView1.Rows.Add("Row7", 0)
DataGridView1.Rows.Add("Row8", -1)
DataGridView1.Rows.Add("Row9", 2)
DataGridView1.Rows.Add("Row10", -3)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox.Show("Row1 check state value: " + DataGridView1.Rows(0).Cells(1).Value.ToString() + Environment.NewLine +
"Row2 check state value: " + DataGridView1.Rows(1).Cells(1).Value.ToString() + Environment.NewLine +
"Row3 check state value: " + DataGridView1.Rows(2).Cells(1).Value.ToString())
End Sub
End Class