【问题标题】:how can i check if checkbox is checked in datagridview column in vb.net我如何检查是否在 vb.net 的 datagridview 列中选中了复选框
【发布时间】:2016-03-26 20:55:07
【问题描述】:

我目前正在创建一个计费系统,但在检查 datagridview 中是否选中了一个复选框时遇到了问题。

我的datagridview 目前包含以下列:

0 : 产品代码

1 : 描述

2 : 尺寸

3 : 成本

4 : 数量

5 : 返回?

(数据网格未绑定到任何东西)

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

例如: 如果用户退回一件价值 20 英镑的商品并购买了一件价值 50 英镑的商品,则系统应向用户显示总成本为 50 英镑 但是,如果用户同时购买了这两个项目,那么系统应该输出 £70。

这完全取决于天气或是否选中了返回复选框。

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

我认为它类似于用于普通复选框 If Checkbox1.CheckState = CheckState.Checked then ... 的代码,但事实并非如此。

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

【问题讨论】:

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


    【解决方案1】:

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

    ''' <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
    

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

    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 中完成的,如果使用较低的版本,您仍然可以在线查看代码。

    【讨论】:

    • 非常感谢凯伦。这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多