because when i ran this code it cause an error (Invoke Code Customize dtRawCo: Exception has been thrown by the target of an invocation.)
Dim indexRawCO As Int32
Dim columnRemoveList As New List(Of Int32)
Dim segmentName = If(segment.Contains(“RESIN”), “RESIN”,“NFM”)
For Each column As DataColumn In dtRawCO.Columns
Dim mapping As IEnumerable(Of DataRow) = dtExcelCOColumnMap.AsEnumerable.Where(
Function(rowColMap) CInt(rowColMap(segmentName+" Column Number")) = indexRawCO
)
If mapping.Count = 1 Then
column.ColumnName = mapping(0)(“Column Name”).ToString
Else
columnRemoveList.Add(indexRawCO)
End If
indexRawCO +=1
Next
columnRemoveList.Reverse
For Each colRemove As Int32 In columnRemoveList
dtRawCO.Columns.RemoveAt(colRemove)
Next
Dim coRowItems As IEnumerable(Of DataRow) = dtRawCO.AsEnumerable.Where(
Function(row) Int32.TryParse(row(“Item No”).ToString,Nothing) And
Not row.ItemArray.Skip(1).All(Function(item) String.IsNullOrEmpty(item.ToString)) And
Not row.ItemArray.Any(
Function(item) item.ToString.ToUpper.Contains(“FIXED”))
)
If coRowItems.Count > 0 Then
dtRawCO = coRowItems.CopyToDataTable
Else
dtRawCO = dtRawCO.Clone
End If
Try Below code I have made few changes for better stability
Initialize indexRawCO to 0.
Add () when calling Reverse.
Ensure TryParse is used correctly with the return value.
Add a check for valid column indices when removing columns from dtRawCO.
Dim indexRawCO As Int32 = 0
Dim columnRemoveList As New List(Of Int32)
Dim segmentName = If(segment.Contains("RESIN"), "RESIN", "NFM")
For Each column As DataColumn In dtRawCO.Columns
Dim mapping As IEnumerable(Of DataRow) = dtExcelCOColumnMap.AsEnumerable.Where(
Function(rowColMap) CInt(rowColMap(segmentName + " Column Number")) = indexRawCO
)
If mapping.Count = 1 Then
column.ColumnName = mapping(0)("Column Name").ToString()
Else
columnRemoveList.Add(indexRawCO)
End If
indexRawCO += 1
Next
columnRemoveList.Reverse() ' Added parentheses
For Each colRemove As Int32 In columnRemoveList
If colRemove >= 0 AndAlso colRemove < dtRawCO.Columns.Count Then ' Check bounds
dtRawCO.Columns.RemoveAt(colRemove)
End If
Next
Dim coRowItems As IEnumerable(Of DataRow) = dtRawCO.AsEnumerable.Where(
Function(row)
Dim itemNo As Integer
Dim isValidItemNo As Boolean = Int32.TryParse(row("Item No").ToString(), itemNo)
Return isValidItemNo AndAlso
Not row.ItemArray.Skip(1).All(Function(item) String.IsNullOrEmpty(item.ToString())) AndAlso
Not row.ItemArray.Any(Function(item) item.ToString().ToUpper().Contains("FIXED"))
End Function
)
If coRowItems.Any() Then ' Used Any() instead of Count
dtRawCO = coRowItems.CopyToDataTable()
Else
dtRawCO = dtRawCO.Clone()
End If