2016-06-10 17 views
0

Mein Ziel ist es, den gesamten Inhalt einer DataTable in eine RichTextBox zu zeigen, so dachte ich über String.Format, um Spalten zu machen, aber ich muss die maximale Länge des Inhalts für jede Spalte wissen.Holen Sie sich die maximale Länge für jedes Feld einer DataTable

fand ich den unter C# -Code auf SO aber ich war nicht in der Lage, es zu VB.Net zu übersetzen:

List<int> maximumLengthForColumns = Enumerable.Range(0, dataTable.Columns.Count) 
            .Select(col => dataTable.AsEnumerable() 
            .Select(row => row[col]).OfType<string>() 
            .Max(val => val.Length)).ToList(); 

Jeder Hinweis auf jede andere (und einfacher oder besser) Art und Weise mein Ziel zu erreichen geschätzt wird.

+0

Welche Sprache möchten Sie verwenden, C# oder VB.NET? – Takarii

+0

@Takarii Ich möchte vb.net verwenden – genespos

Antwort

0
'dtb is the datatable' 
Dim lstMaxLen As New List(Of Integer) 
For Each dcl As DataColumn In dtb.Columns 
    Dim intMaxLen As Integer = 0 
    For Each drw As DataRow In dtb.Rows 
    If drw(dcl.ColumnName).ToString.Length > intMaxLen Then 
     intMaxLen = drw(dcl.ColumnName).ToString.Length 
    End If 
    Next drw 
    lstMaxLen.Add(intMaxLen) 
Next dcl 
+1

Oder Sie könnten eine Datagridview und Autosize die Spalten verwenden – SSS

1

Es sollte wie folgt sein:

Dim maximumLengthForColumns As List(Of Integer) = Enumerable.Range(0, DataTable.Columns.Count).[Select](Function(col) dataTable.AsEnumerable().[Select](Function(row) row(col)).OfType(Of String)().Max(Function(val) val.Length)).ToList() 

Der formatierte Code ist als unten (dieses ist nur zur besseren Lesbarkeit):

Dim maximumLengthForColumns As List(Of Integer) = Enumerable.Range(0, dataTableDataTable.Columns.Count) 
               .[Select](Function(col) dataTable.AsEnumerable() 
               .[Select](Function(row) row(col)) 
               .OfType(Of String)().Max(Function(val) val.Length)).ToList() 
+0

Danke für Ihre Antwort, aber ich bekomme Fehler auf '. [Select]' und (wenn ich 'Option Strict' einschalten) auf' Enumerable.Range (0, dataTable.Columns.Count) 'wegen einer Umwandlung von' IEnumerable (Of Integer) 'in eine' List (Of Integer) ' – genespos

+0

@genespos ... Fügen Sie den Code ohne Zeilenumbrüche ein. Ich habe Zeilenumbrüche verwendet, um den Code zu kopieren: 'Dim maximumLengthForColumns As List (Integer) = Enumerable.Range (0, DataTable.Columns.Count). [Select] (Funktion (col) dataTable.AsEnumerable(). [Select] (Funktion (Zeile) Zeile (col)). OfType (Of String)(). Max (Funktion (val) val.Length)). ToList() ' –

+0

@genespos ... Siehe meine aktualisierte Antwort. Jetzt kopiere es. –