我使用DataGridView
和来自TableAdapter的DataSource并添加了5个未绑定的列,其类型为DataGridViewCheckBoxColumn
。从DataGridView中的多行复选框中只选择一个复选框
它们分别是: “lima
”, “empat
”, “tiga
”, “dua
”, “satu
”
我需要做的,则选择复选框 “利马” 的时候,同一行中,其余复选框未选中成为或仅可在同一行
在这里,在选择一个复选框是我在CellValueChanged
事件写下:
Private Sub DataGridView3_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView3.CellValueChanged
If DataGridView3.CurrentRow IsNot Nothing Then
Dim SelectedColumnName = DataGridView3.Columns(DataGridView3.CurrentCellValue.ColumnIndex).Name
If e.ColumnIndex = DataGridView3.Columns("lima").Index OrElse _
e.ColumnIndex = DataGridView3.Columns("empat").Index OrElse _
e.ColumnIndex = DataGridView3.Columns("tiga").Index OrElse _
e.ColumnIndex = DataGridView3.Columns("dua").Index OrElse _
e.ColumnIndex = DataGridView3.Columns("satu").Index Then
Dim Row = CType((CType(DataGridView3.DataSource.Current, DataRowView)).Row, DataRow)
If SelectedColumnName = "lima" Then
If DataGridView3.CurrentRowCellValue("lima") = "True" Then
Row.Item("empat") = False
Row.Item("tiga") = False
Row.Item("dua") = False
Row.Item("satu") = False
End If
'and so..on
ElseIf SelectedColumnName = "satu" Then
If DataGridView3.CurrentRowCellValue("satu") = "True" Then
Row.Item("lima") = False
Row.Item("empat") = False
Row.Item("tiga") = False
Row.Item("dua") = False
End If
End If
DataGridView3.CurrentCell = DataGridView3(e.ColumnIndex, e.RowIndex)
End If
End If
End Sub
这是福在模块
<System.Diagnostics.DebuggerStepThrough()> _
<Runtime.CompilerServices.Extension()> _
Function CurrentRowCellValue(ByVal sender As DataGridView, ByVal ColumnName As String) As String
Dim Result As String = ""
If Not sender.Rows(sender.CurrentRow.Index).Cells(ColumnName).Value Is Nothing Then
Result = sender.Rows(sender.CurrentRow.Index).Cells(ColumnName).Value.ToString
End If
Return Result
End Function
<System.Diagnostics.DebuggerStepThrough()> _
<Runtime.CompilerServices.Extension()> _
Function CurrentCellValue(ByVal sender As DataGridView) As DataGridViewCell
Return sender(sender.Columns(sender.CurrentCell.ColumnIndex).Index, sender.CurrentRow.Index)
End Function
nctions为CurrentCell
和CurrentRowCellValue
,这是从CurrentCellDirtyStateChanged
事件
Private Sub DataGridView3_CurrentCellDirtyStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView3.CurrentCellDirtyStateChanged
If TypeOf DataGridView3.CurrentCell Is DataGridViewCheckBoxCell Then
DataGridView3.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
我已经在DataGridView的只读属性设置为False。问题是,我仍然可以检查同一行中的所有复选框。
http://oi57.tinypic.com/2hr0qbk.jpg
有人可以给什么我做错了这里的建议?
感谢
是的,它这样工作...!感谢您的代码和链接参考:) –
@SylvieYunjae欢迎您 – Chris