如何检查是否在vb.net的datagridview列中选中了复选框

时间:2016-03-26 01:02:42

标签: vb.net winforms visual-studio checkbox datagridview

我目前正在创建一个结算系统,但我无法检查是否在datagridview内选中了复选框。

我的datagridview目前包含以下列:

0:产品代码

1:说明

2:尺寸

3:费用

4:数量

5:回归?

(Datagrid未绑定任何内容)

“回归?”列是复选框列。这样,如果用户正在返回项目,那么他们可以检查他们返回的每个项目的复选框,然后根据是否选中了复选框,执行不同的代码集。

例如: 如果用户返回价值20英镑的物品并购买价格为50英镑的物品,则系统应向用户显示总费用为50英镑 但是,如果用户购买这两个项目,那么系统应该输出70英镑。

这将取决于天气与否,选中返回复选框。

执行此计算的代码我没有问题,我已经写过了。但是,它是检查天气的代码,在指定的datagridview列中检查任何复选框。

我认为它类似于用于普通复选框If Checkbox1.CheckState = CheckState.Checked then ...的代码,但它不是。

我希望我能清楚地理解我的情景和问题,并且有人可以提供帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个完整的示例,其中在IDE中创建DataGridViewColumns,因此没有代码显示它们正在创建。

''' <summary>
''' DataGridView columns were created in the IDE
''' </summary>
''' <remarks></remarks>
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView1.Rows.Add(New Object() {"John", "USA", True})
        DataGridView1.Rows.Add(New Object() {"Mike", "AU", False})
        DataGridView1.Rows.Add(New Object() {"Jack", "EU", True})
        DataGridView1.Rows.Add(New Object() {"Mike", "AU", False})
    End Sub
    Private Sub DataGridView1SelectAll_CurrentCellDirtyStateChanged(
        ByVal sender As Object,
        ByVal e As EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged

        RemoveHandler DataGridView1.CurrentCellDirtyStateChanged,
            AddressOf DataGridView1SelectAll_CurrentCellDirtyStateChanged

        If TypeOf DataGridView1.CurrentCell Is DataGridViewCheckBoxCell Then
            DataGridView1.EndEdit()
            Dim Checked As Boolean = CType(DataGridView1.CurrentCell.Value, Boolean)
            If Checked Then
                MessageBox.Show("You have checked")
            Else
                MessageBox.Show("You have un-checked")
            End If
        End If

        AddHandler DataGridView1.CurrentCellDirtyStateChanged,
            AddressOf DataGridView1SelectAll_CurrentCellDirtyStateChanged
    End Sub
End Class

enter image description here

这是一种语言扩展方法,也可以通过按下按钮来获取所有已检查的行。它很容易调整,以便您可以请求已选中或未选中的行。

Module Module1
    <System.Diagnostics.DebuggerStepThrough()> _
    <Runtime.CompilerServices.Extension()> _
    Public Function GetCheckedRows1(
        ByVal GridView As DataGridView,
        ByVal ColumnName As String) As List(Of DataGridViewRow)
        Return _
            (
                From SubRows In
                    (
                        From Rows In GridView.Rows.Cast(Of DataGridViewRow)()
                        Where Not Rows.IsNewRow
                    ).ToList
                Where CBool(SubRows.Cells(ColumnName).Value) = True
            ).ToList
    End Function
End Module

用法

Dim rowsCheckedList As List(Of DataGridViewRow) =
    DataGridView1.GetCheckedRows1("ProcessColumn")

有关此主题,另请参阅我的MSDN code samples。它们在VS2013中完成,如果使用较小的版本,您仍然可以在线查看代码。