2016-08-09 92 views
1

Ich habe eine DataTable mit Spalte DisplayOrder. Es behält inkrementierte Werte um 1 pro Entitätsspalte bei. In einigen Szenarien wird dieses Inkrement stören. Jetzt muss ich die DataTable aktualisieren, um den DisplayOrder Spaltenwert durch 1 zu halten.Aktualisieren Sie die Datentabelle Zeile mit ihrem Zeilenindex vb.net

Ich habe folgenden Code ausprobiert. aber es aktualisiert alle Zeilen, die von 1.

Dim i As Integer = 0 

dtCustomers.Select("EntityID =" & EntityID).ToList().ForEach(Function(r) InlineAssignHelper(r("DisplayOrder"), i)) 
+0

Kann mir bitte jemand helfen, auf diesem. –

+0

Können Sie erklären, wo dieser Code falsch ist, und den Code für InlineAssignHelper hinzufügen? – Steve

+0

Mit dem obigen Code werden alle Zeilenwerte von "DisplayOrder" in 1 geändert. –

Antwort

1

Ich gehe davon aus, dass Ihr InlineAssignHelper den zweiten Parameter nimmt und versucht, den Wert für die Spalte Displayorder einzustellen. Aber wie Sie diesen Code geschrieben haben, ist das nicht möglich, da Sie den Wert der Spalte DisplayOrder für die aktuelle Zeile übergeben und nicht die Zeile selbst. Außerdem müssen Sie den Wert von i erhöhen, sonst setzen Sie außerhalb des Aufrufs von DisplayOrder immer den Wert Null fest.

Aus all diesen Gründen (und auch mehr Lesbarkeit) Ich empfehle die ForEach Liste Erweiterung zu verlassen und eine traditionelle Schleife verwenden

Dim rows = dtCustomers.Select("EntityID =" & EntityID) 
if rows IsNot Nothing Then 
    For x = 0 to rows.Length - 1 
     InlineAssignHelper(rows(x), "DisplayOrder", x+1)) 
     ' At this point you can also directly set the column without an helper function 
     ' rows(x)("DisplayOrder") = x+1 
    Next 
End If 

Public Sub InlineAssignHelper(row As DataRow, colName as String, value As Integer) 
    row(colName) = value 
End Sub