繁体   English   中英

如何获取datagridview的选中行

[英]How to get the checked rows of datagridview

我已经写了代码
这使用户能够检查 datagridview 中的复选框列,当用户单击确定按钮时,所选行将显示在 msgbox 中。
我想将它们发送到另一个表单(在列表框中),而不是在 msgbox 中显示行。

Public Class Form

WithEvents bsCustomer As New BindingSource 

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim dt As New DataTable
    dt.Columns.Add(New DataColumn With {.ColumnName = "Check", .DataType = GetType(Boolean)})

    Dim con As New SqlConnection(ConString)
    Dim Command = New SqlCommand()
    Command.Connection=con
    Command.CommandText="SELECT ID, Name FROM Table1"
    con.Open()
    dt.Load(command.ExecuteReader)

    For Each row As DataRow In dt.Rows
        row.SetField(Of Boolean)("Check", False)
    Next

    dt.AcceptChanges()
    bsCustomer.DataSource = dt
    Datagridview1.DataSource = bsCustomer 

End Sub  

Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
    Dim Names =
        (
            From T In Datagridview1.GetChecked("Check")
            Select CStr(T.Cells("name").Value)
        ).ToArray

    If Names.Count > 0 Then
        MessageBox.Show(String.Join(Environment.NewLine, Names))    
    Else
        MessageBox.Show("Nothing checked")
    End If

End Sub 

Public Function GetChecked(ByVal GridView As DataGridView, ByVal ColumnName As String) As List(Of DataGridViewRow)
    Return (From Rows In GridView.Rows.Cast(Of DataGridViewRow)() Where CBool(Rows.Cells(ColumnName).Value) = True).ToList
End Function

您必须知道复选框列的索引,然后才能使用:

IEnumerable<DataGridViewRow> GetCheckedRows(DataGridView grid, int checkboxColumnIndex)
{
    List<DataGridViewRow> checkedRows = new List<DataGridViewRow>();
    for (int rowIndex = 0; rowIndex < grid.RowCount; rowIndex++)
    {
        var chkCell = grid[checkboxColumnIndex, rowIndex] as DataGridViewCheckBoxCell;
        bool isChecked = (bool)chkCell.EditedFormattedValue;
        if (isChecked)
            checkedRows.Add(grid.Rows[rowIndex]);
    }
    return checkedRows;
}

现在您必须有一个Form2实例才能将这些行传递给它,例如通过公共属性或方法。 与其传递DataGridViewRow ,不如传递选定的对象。 但是由于您没有提到数据源,因此我使用了行。


VB.NET:

Function GetCheckedRows(grid As DataGridView, checkboxColumnIndex As Integer) As IEnumerable(Of DataGridViewRow)
    Dim checkedRows As New List(Of DataGridViewRow)
    For rowIndex As Integer = 0 To grid.RowCount - 1
        Dim chkCell = TryCast(grid(checkboxColumnIndex, rowIndex), DataGridViewCheckBoxCell)
        Dim isChecked As Boolean = CBool(chkCell.EditedFormattedValue)
        If isChecked Then
            checkedRows.Add(grid.Rows(rowIndex))
        End If
    Next
    Return checkedRows
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM