VB.NET Копировать конкретную ячейку из выбранного Datagridview в список длинных - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть сетка данных, которая содержит около 400 000 строк - где пользователь выбирает несколько строк, я бы хотел, чтобы список длинных был заполнен определенной ячейкой из выбранных строк, т.е. скрытого значения первичного ключа, которое у меня есть наthe Datagridview.

Я дошел до этого, но не могу заставить его работать, и я думаю, что выполнение через LinQ будет быстрее, чем выполнение в качестве For ... Next или For ... EachЦикл на selectedrows - особенно если пользователь выполняет (и может и будет) выбирать 100 000+ строк - но мой синтаксис LinQ ужасен - так что пока я здесь, если у кого-то есть отличная рекомендация для LinQ, это тоже будет здорово (хотя естькниги есть, нет ничего лучше, чем рекомендация кого-то, кто прочитал несколько из них)

   Dim Mylist As New List(Of Long)

            Mylist.AddRange(DataGridView1.SelectedRows.Cast(Of DataGridViewCell).Select(Function(c) c.ColumnIndex(0).Value).ToList)

VS, похоже, не нравится c.ColumnIndex (0). Значение

1 Ответ

0 голосов
/ 16 декабря 2018

Свойство SelectedRows является коллекцией DataGridViewSelectedRowCollection , а не коллекцией DataGridViewCell .Таким образом, вы должны привести к нужному типу, тогда вы можете использовать Linq для перечисления по коллекции DataGridViewRow , которая имеет свойство Cells .Это свойство является коллекцией DataGridViewCell .Теперь вы можете использовать эту коллекцию как массив и использовать свой индекс для получения нужного столбца.
Наконец, не полагайтесь на автоматическое преобразование типов, предоставляемое VB.NET.Я предлагаю всегда быть явным в ваших конверсиях.Используйте Conver.ToInt64 или Int64.Parse

Dim result = DataGridView1.SelectedRows.
                           Cast(Of DataGridViewRow).
                           Select(Function(c) Convert.ToInt64(c.Cells(0).Value)).
                           ToList()
...