2015-10-28 3 views
-1

Я написал код
, который позволяет пользователю проверить флажок в столбце datagridview и когда пользователь нажимает кнопку ok, выбранные строки будут отображаться в msgbox.
Вместо отображения строк в msgbox я хочу отправить их в другую форму (в списке).Как получить проверенные строки datagridview

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 
+0

Что означает _checked Столбцы? Строки проверяются, не так ли? Что такое источник данных? –

+0

my bad .... извините (отредактировано) –

ответ

0

Вы должны знать, индекс CheckBox-колонки, то вы можете использовать это:

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 
+0

i m using VB.net @Tim schmelter –

+0

@ user5498825: отредактировано –

+0

plz посмотреть @Tim Schmelter –

Смежные вопросы