Я хочу сравнить два datagridviews и использовать метод Except
на интерфейсе IEnumerable
, чтобы узнать разницу между ними. Один пример моих DataGridViews:конвертировать один объект массива в IEnumerable
DG1 idProduct Item 1 Item A 1 Item B 2 Item C 2 Item D DG2 idProduct Item Price IdSupplier 1 Item A 10.00 1 1 Item B 20.00 1 2 Item C 30.00 1 2 Item D 40.00 1 1 Item A 20.00 3 1 Item B 30.00 3 2 Item C 40.00 3 2 Item D 50.00 3
Итак, я попытался поместить данные из dgv1
в массив, и данные из dgv2
в динамический массив, потому что я хочу список для каждого IdSupplier
(в случае, если , 1, 3) и сравнить их с методом исключения. Мой код:
Imports System.Data.SqlClient
Imports System.Data
Imports datagridviewTota.DataSet1TableAdapters
Imports System.Collections.Generic
Imports System.Collections.ArrayList
Imports System.Collections.CollectionBase
Public Class form1
Public itemArray()
Public ItemListArray()
Public Shared j As Integer
Private sub main()
(…)
Dim ds1 As New DataSet
Dim item As List(Of String) = New List(Of String)
Dim Id As Integer
Dim dr As DataRow
Dim dr1 As DataRow
Dim itemList As List(Of String) = New List(Of String)
Dim idSuppliers() as integer
ReDim itemArray(j) ‘ j represents the numbers of elements in idSuppliers() (third column of dg2)
Try
//create an array for the dgv1//
For Each row As DataGridViewRow In dgv1.Rows
item = dgv1.Rows(row.Index).Cells(1).Value
itemList.Add(item)
Next
Dim itemListArray = itemList.toArray()
//create a dynamic array for the dgv2 by filtering for each idSuppliers, put the values from the second column into a list and convert each list into a dynamic array//
For Each element In idSuppliers
Dim dv As New DataView()
dv = New DataView(ds1.Tables("idProduct"))
With dv
.RowFilter = "idSupplier = " & element & " "
End With
dgv2.DataSource = dv
For Each row As DataGridViewRow In dgv2.Rows
Id = dgv2.Rows(row.Index).Cells(3).Value
If Id = element Then
item = dgv2.Rows(row.Index).Cells(1).Value
itemList.Add(item)
End If
Next
itemArray(i) = itemList.ToArray()
itemList.clear()
i = i + 1
Next
end sub
Итак, я попробовал IEnumerable.Except
, но мне кажется, что мой itemArray()
является объектом, потому что я получил сообщение "System.linq.Enumerable+<ExceptIterator>d_99'1[System.Object]"
, когда я пытаюсь попробовать бросить exceptItems
, следующим образом:
Dim exceptItems = itemListArray.Except(itemArray(2))
Я также попробовал:
Dim onlyInFirstSet As IEnumerable(Of String) = itemListArray.Except(itemArray(2))
Dim output As New System.Text.StringBuilder
For Each str As String In onlyInFirstSet
output.AppendLine(str)
Next
MsgBox(output.ToString())
И знаете, я получаю ERR. номер 13. Я думаю, проблема в том, что мне нужно преобразовать itemArray()
в IEnumerable
, есть ли способ, которым я мог бы это сделать без серьезных изменений в моем коде?
Холли бог! благодаря! Я включил эту штуку и увидел много работы ... Я выключу ее снова ... – user2554904