【发布时间】:2023-03-03 04:13:01
【问题描述】:
现状
我显示了一个包含自定义选项的传送带列表。选择多个传送带时,我将罕见选项显示为不确定的状态,如此:
这表明传送带 EB-1 和 EB-3没有具有相同的自定义选项(Test 和 Test2)。
目标
我希望用户能够单击不确定状态并将其设置为 false 或 true。当用户交互发生时,我不希望发生不确定状态。
使用三态映射加载选项
Public Enum TriState
Common
TurnedOn
TurnedOff
End Enum
Private Sub LoadCustomOptions()
ViewOptions.Table = DataSet1.CustomOptions
With dgvOptions
.DataSource = ViewOptions
'Add checkbox
Dim ChkBox As New DataGridViewCheckBoxColumn
ChkBox.Name = "ColChk"
ChkBox.HeaderText = ""
ChkBox.MinimumWidth = 20
ChkBox.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
ChkBox.ThreeState = True
ChkBox.TrueValue = TriState.TurnedOn
ChkBox.FalseValue = TriState.TurnedOff
ChkBox.IndeterminateValue = TriState.Common
ChkBox.ValueType = GetType(TriState)
ChkBox.DisplayIndex = 0
'Width
.Columns("Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.Columns("Description").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
'Minimum Width
.Columns("Description").MinimumWidth = 150
.Columns.Add(ChkBox)
End With
End Sub
尝试
这是我尝试过的:
Private Sub dgvOptions_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvOptions.CellContentClick
If e.RowIndex < 0 Then Exit Sub
If dgvOptions.Columns(e.ColumnIndex).Name = "ColChk" Then
If dgvOptions.Rows(e.RowIndex).Cells("ColChk").Value = TriState.TurnedOn Or dgvOptions.Rows(e.RowIndex).Cells("ColChk").Value = TriState.Common Then
dgvOptions.Rows(e.RowIndex).Cells("ColChk").Value = TriState.TurnedOff
Else
dgvOptions.Rows(e.RowIndex).Cells("ColChk").Value = TriState.TurnedOn
End If
End If
End Sub
当用户单击自定义选项复选框时,我仍然会出现不确定状态。还有另一种我忽略的方法吗?
【问题讨论】:
-
见msdn.microsoft.com/en-us/library/… 它展示了如何将枚举值“映射”到列
-
@Plutonix 抱歉,我对其进行了编辑以包含枚举映射。一开始我应该把它包括在内。
标签: vb.net winforms checkbox datagridview threestate