目标
我需要一种方法,通过单击绑定(bind)的CheckBox
中的DataGridView
将项目设置为完成的。完成此操作后,由于DataGridView
的行过滤器,因此不再从DataView
中看到该项目。
解释
我有一个DataGridView
绑定(bind)到DataView
。
Private Sub LoadLispImprovements()
Private ViewLispImprovements As New DataView
ViewLispImprovements.Table = Programs.Tables("dtLispImprovements")
ViewLispImprovements.RowFilter = "Completed=0"
Lisp_dgvImprovements.DataSource = ViewLispImprovements
End Sub
此DataView
的表设置为以下DataTable
:此
DataTable
的“主键”设置为正确的字段。 Completed
字段有一个红色正方形,目的是向大家展示我将其设置为 bool 值。看看我的
DataGridView
:这是我要单击复选框的位置,项目应被过滤掉(因为未选中复选框 ShowAll )
问题
当我单击
CheckBox
时,该项保留在DataGridView
中。为了将其过滤掉,我必须选择另一行。看一看:当我更改行时,它终于消失了:
选中已完成的复选框后,如何立即将其自身删除?
附言:是的,我有CurrentCellDirtyStateChanged事件处理程序。
Private Sub Lisp_dgvImprovements_CurrentCellDirtyStateChanged(sender As Object, e As System.EventArgs) Handles Lisp_dgvImprovements.CurrentCellDirtyStateChanged
If Lisp_dgvImprovements.IsCurrentCellDirty Then
Lisp_dgvImprovements.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
最佳答案
您可以通过在更改单元格的值时结束DataRow
的编辑来实现此目的。
Private Sub Lisp_dgvImprovements_CurrentCellDirtyStateChanged(sender As Object, e As System.EventArgs) Handles Lisp_dgvImprovements.CurrentCellDirtyStateChanged
If (Me.Lisp_dgvImprovements.IsCurrentCellDirty) Then
Me.Lisp_dgvImprovements.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
Private Sub Lisp_dgvImprovements_CellValueChanged(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Lisp_dgvImprovements.CellValueChanged
' |-- The index of boolean DataGridViewColumn
If ((e.ColumnIndex = 0) AndAlso (e.RowIndex > -1)) Then
With Me.Lisp_dgvImprovements.Rows(e.RowIndex)
If (Not .IsNewRow) Then
With DirectCast(.DataBoundItem, DataRowView).Row
' |-- The index of boolean DataColumn
.Item(0) = True
.EndEdit()
End With
End If
End With
End If
End Sub
关于vb.net - 如何在复选框上刷新绑定(bind)的DataGridView单击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22046909/