簡體   English   中英

我如何檢查vb.net的datagridview列中的復選框是否已選中

[英]how can i check if checkbox is checked in datagridview column in vb.net

我目前正在創建一個計費系統,無法檢查datagridview是否已選中復選框。

我的datagridview當前包含以下列:

0:產品編號

1:說明

2:大小

3:費用

4:數量

5:回來嗎?

(Datagrid不受任何約束)

回報?” column是復選框列。 這樣一來,如果用戶要退回商品,則他們可以選中要退回的每個商品的復選框,然后根據復選框是否選中來執行不同的代碼集。

例如:如果用戶退回一件價值20英鎊的物品並購買一件價值50英鎊的物品,則系統應向用戶顯示50英鎊的總費用。但是,如果用戶同時購買這兩種物品,則系統應輸出英鎊。 70

這將完全取決於天氣,或者是否選中了“返回”復選框。

進行此計算的代碼我沒有問題,我已經編寫了。 但是,它是檢查天氣的代碼,還是未在指定的datagridview列中選中任何復選框。

我假設它類似於用於普通復選框的代碼, If Checkbox1.CheckState = CheckState.Checked then ...但事實並非如此。

我希望我已經弄清楚了我的情況和問題,希望有人可以提供幫助,謝謝。

這是一個完整的示例,其中在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

在此處輸入圖片說明

這是一種語言擴展方法,該方法也很有幫助,通過按一下按鈕,您可以獲取所有選中的行。 調整起來很容易,這樣您就可以要求選中或未選中的行。

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代碼示例 它們是在VS2013中完成的,如果使用較低版本,您仍然可以在線查看代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM