我正在尝试将 datagridview 上的列与 2 种控件类型(复选框和文本框)混合,数据来自我也在编写的存储过程,因此我有一点灵活性。
在存储过程中,我返回一个空白列作为Selection
GridView 中的列,但是在尝试根据条件将单元格转换为其他类型时遇到问题......
我一直认为问题是在控件类型之间进行转换时的数据类型,我尝试了各种不同的方法来先转换值,先转换控件等,但没有任何方法可以 100% 工作.....
目前,我让 SPFalse
在列中返回字符串,然后将其与标准一起使用来创建复选框.....它工作正常,但即使将值转换为 a 后,值仍然是字符串Boolean
,数据类型也是Boolean
on复选框,但值是String
.....这已经超出了我的想象,我不知所措......
NewCntrl2 = New DataGridViewCheckBoxCell
NewCntrl2.Value = Convert.ToBoolean(DGV.Cells(0).Value)
NewCntrl2.ValueType = GetType(System.Boolean)
DGV.Cells(0) = NewCntrl2
这是将文本框列单元格转换为复选框单元格的代码
任何想法为什么复选框的值仍然是一个字符串('False')......
它现在正在做的问题是当我处理单元格单击事件时,我无法使用该Not Value
技术选中或取消选中该框
- - 编辑 - -
这是我正在使用的子程序,它创建了几种不同类型的控件。
Public Sub posted_CreateControls()
Dim Cell_0 As String
Dim Cell_1 As String
Dim Cell_2 As String
Dim NewCntrl As DataGridViewButtonCell
Dim NewCntrl2 As DataGridViewCheckBoxCell
For Each Rw As DataGridViewRow In dgvPosted.Rows
With Rw
Cell_0 = .Cells(1).Value.ToString
Cell_1 = .Cells(2).Value.ToString
Cell_2 = .Cells(3).Value.ToString
'this column starts with a value 'False' returned by the SP,
'we don't want checkboxes on all rows and using false string was the only method
'i could find to easily do this
'if both assign and unassign id are present then we need a checkbox
Select Case Cell_0
Case String.Empty
.Cells(0).Value = String.Empty
Case Else
If Not Cell_1 = String.Empty Then
NewCntrl2 = New DataGridViewCheckBoxCell
NewCntrl2.Value = Convert.ToBoolean(.Cells(0).Value)
NewCntrl2.ValueType = GetType(System.Boolean)
.Cells(0) = NewCntrl2
Else
.Cells(0).Value = String.Empty
End If
End Select
'Create an Assign button for each row in columnindex 0(Assign) if ColumnIndex(2)(Edit) contains M, L or I
Select Case Cell_2
Case "M", "L", "I", "P"
NewCntrl = New DataGridViewButtonCell
.Cells(1) = NewCntrl
NewCntrl.Tag = Cell_0
NewCntrl.Value = "Assign"
End Select
'Create an UnAssign button in columnindex 1(UnAssign) if the value of columnindex 1(Unassign) is not empty
If Not Cell_1 = vbNullString Then
NewCntrl = New DataGridViewButtonCell
.Cells(2) = NewCntrl
NewCntrl.Tag = Cell_1
NewCntrl.Value = "UnAssign"
End If
'Create an Edit button on columnindex 2(Edit) if ColumnIndex 2(Edit) is not M, L or empty string
Select Case Cell_2
Case "M", "L", "P", vbNullString
'Do Nothing
Case Else
NewCntrl = New DataGridViewButtonCell
.Cells(3) = NewCntrl
NewCntrl.Tag = Cell_2
NewCntrl.Value = "Edit"
End Select
End With
Next
NewCntrl = Nothing
End Sub
这将创建我想要的复选框,但值仍然作为导致单元格的字符串。单击事件失败,因为我试图将复选框值设置为 true 并且该.value = not .value
部分失败,因为由于某种原因该值仍然是字符串,但复选框值类型实际上是布尔值.....