Ihre Frage ist etwa nicht klar, ob Sie eine Ausstellung Filter oder ein Datenabruf Filter benötigen, also werde ich das letztere annehmen. Ich gehe davon aus, dass Ihre [OrderNo] Spalten beide vom Typ Integer
sind. Also hier geht:
Function FilterCancelledOrders(allOrders As DataTable, cancelledOrders As DataTable) As DataRow
' Let's use LInQ to collect all the numbers of cancelledOrders into an Array Of Integer
Dim CancelledOrderNos = cancelledOrders.Select.Select(
Function(dr) dr.Field(Of Integer)("OrderNo")).ToArray
' Now let's collect all dataRows from allOrders where OrderNo is contained in the Array of Integer we just got above:
Dim CancelledOrderRows = allOrders.Select.Where(
Function(dr) CancelledOrderNos.Contains(dr.Field(Of Integer)("OrderNo"))).ToArray
' If this is enough for your needs, now you have an Array of DataRow containing
' all rows in [allOrders] whose [OrderNo] field info is contained in the corresponding
' field of any row in [cancelledOrders]
Return CancelledOrderRows
End Function
EDIT: Diese Version nicht ausgewählten Zeilen versteckt:
Sub FilterCancelledOrders(allOrdersView As DataGridView, cancelledOrders As DataTable, dgview as DataGridView)
' so far, same as before, but type String
Dim CancelledOrderNos = cancelledOrders.Select.Select(
Function(dr) dr.Field(Of String)("OrderNo")).ToArray
' iterate through DataGridView's rows
For each dgvr as DataGridViewRow in dgview.Rows
' set row visibility according to your criterium
dgvr.Visible = Not CancelledOrderNos.Contains(dgvr.Cells("OrderNo").Value)
Next
' it's done!
End Sub
ODER SONST Sie können eine Datentabelle gefiltert erstellen und legen Sie es als Datagridview die Datenquelle:
Function GetPositiveOrdersDataTable(allOrders As DataTable, cancelledOrders As DataTable) As DataTable
Dim CancelledOrderNos = cancelledOrders.Select.Select(
Function(dr) dr.Field(Of Integer)("OrderNo")).ToArray
' Collect all dataRows from allOrders where OrderNo is NOT contained in the Array of Integer we just got above:
Dim positiveOrderRows = allOrders.Select.Where(
Function(dr) Not CancelledOrderNos.Contains(dr.Field(Of Integer)("OrderNo"))).ToArray
' create empty table with same structure as allOrders
Dim positiveOrders = allOrders.Clone()
' populate it with orders that were not cancelled
For each dr in positiveOrderRows
positiveOrders.ImportRow(dr)
Next
Return positiveOrders
End Function
zunächst einmal vielen Dank für Ihre Ausgaben wertvolle Zeit. Tatsächlich wird diese Datentabelle verwendet, um Datagridview zur Laufzeit zu füllen. Ich habe einige Kontrollkästchen, um die Datentabelle mit DataView.RowFilter zu filtern. also schätze ich brauche einen Ausstellungsfilter. Entschuldigung, ich konnte nicht erwähnen, dass beide [OrderNo] Spalten String sind. lass mich versuchen, mit deiner antwort zu codieren :) –
Siehe edit. – VBobCat
Vielen Dank @VBobCat. Mit Ihrer Hilfe könnte ich weitermachen. Danke noch einmal –