2016-06-10 2 views
0

Моя цель - показать весь контент DataTable в RichTextBox, поэтому я подумал об использовании String.Format для создания столбцов, но мне нужно знать максимальную длину содержимого для каждого столбца.Получите максимальную длину для каждого поля DataTable

Я нашел ниже C# код на SO, но я не смог перевести его на VB.Net:

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

Любой намек на любую другую (и проще или лучше) способ достичь своей цели ценится.

+0

Какой язык вы хотите использовать, C# или VB.NET? – Takarii

+0

@Takarii Я хочу использовать vb.net – genespos

ответ

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

Или вы могли бы использовать datagridview и авторазбрать столбцы – SSS

1

Это должно быть что-то вроде этого:

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() 

Отформатированная код, как показано ниже (это один раз для читаемости):

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

Спасибо за ваш ответ, но я получаю ошибку в '. [Select]' и (если я включу 'Option Strict') в' Enumerable.Range (0, dataTable.Columns.Count) 'из-за преобразования из' IEnumerable (Of Integer) 'в' List (Of Integer) ' – genespos

+0

@genespos ... Вставить код без разрывов строк. Я использовал разрывы строк для большей читаемости, вы должны скопировать этот код: 'Dim maximumLengthForColumns As List (Of Integer) = Enumerable.Range (0, DataTable.Columns.Count). [Выбрать] (Функция (col) dataTable.AsEnumerable(). [Select] (Функция (строка) row (col)). OfType (Of String)(). Max (Function (val) val.Length)). ToList() ' –

+0

@genespos ... См. Мой обновленный ответ. Теперь скопируйте его. –

Смежные вопросы