vb.net получает коллекцию строк из связанного представления данных на основе выбора
Я читал и гуглил, но не нашел мелочи, которая бы мне помогла. Я думаю, что у меня есть простая логическая ошибка. Итак, вот что у меня есть: DataGridView привязан к Datatable, заполненному именами файлов (и другой информацией, в основном аудиоформатом). Что ж, теперь я написал подпрограмму (VS2013 и использую.Net 4.0) для печати, которая работает нормально, я попытался добавить опцию для печати только выбранных строк из DataGridView и подумал, что все в порядке, затем я задаю процедуру печати целых строк DataGridView или только выбранные строки на основе этой опции. Это то, что я пытался: На уровне формы я определил rowCollection как: Dim rowCollection As DataGridViewRowCollection
Sub BeginPrint Sub имеет следующие строки для получения строк:
'*** Get Rows to print
rowCollection = New DataGridViewRowCollection(FileDataGridView)
If My.Settings.PrintSelected And (FileDataGridView.SelectedRows.Count > 0) Then
Dim row As New DataGridViewRow
For r = FileDataGridView.SelectedRows.Count - 1 To 0 Step -1
row = FileDataGridView.SelectedRows(r)
rowCollection.Add(FileDataGridView.Rows(row.Index))
Next
Else
rowCollection = FileDataGridView.Rows
End If
Я думал, что rowCollection будет чем-то вроде массива отдельных строк, но, видимо, это не делает работу. Если я хочу напечатать все строки, это работает нормально, но для выбранных строк я получаю сообщение об ошибке, что никакие элементы не могут быть добавлены в коллекцию строк, потому что DataGridView привязан к данным. Я думал, что rowCollection может быть заполнен отдельными строками, а не только связью со всем DataGridView. Где я не прав? Я также пытался получить только.SelectedRows как коллекцию, но затем я получаю ошибки типа, поскольку DataGridView.Rows и DataGridView.SelectedRows не имеют одинаковый формат? Я хотел бы получить список / коллекцию / массив строк или выбранных строк, которые я затем могу использовать для печати. Любая помощь будет оценена
С уважением,
Кристиан
1 ответ
Конечно, не идеальное решение, но делает работу:
Dim rows As List(Of DataGridViewRow)
Dim rowarray(DataGridView1.Rows.Count) As DataGridViewRow
If DataGridView1.SelectedRows.Count > 0 Then
DataGridView1.SelectedRows.CopyTo(rowarray, 0)
Else
DataGridView1.Rows.CopyTo(rowarray, 0)
End If
rows = rowarray.ToList
rows.RemoveAll(Function(a As DataGridViewRow) a Is Nothing)
Существует разница между SelectedRowCollection и RowCollection, по какой-либо причине они не использовали наследование для этих 2, поэтому вам нужно немного обмануть, чтобы обрабатывать оба одинаково