【问题标题】:Get the max length for each field of a DataTable获取 DataTable 的每个字段的最大长度
【发布时间】:2016-06-10 07:31:02
【问题描述】:

我的目标是将DataTable 的全部内容显示为RichTextBox,所以我考虑使用String.Format 来制作列,但我需要知道每个列的最大内容长度。

我在SO 上找到了以下 C# 代码,但我无法将其翻译成 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();

任何关于实现我的目标的不同(更简单或更好)方式的提示都表示赞赏。

【问题讨论】:

  • 您想使用哪种语言,c# 还是 VB.NET?
  • @Takarii 我想使用 vb.net

标签: c# vb.net datatable translate


【解决方案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()

【讨论】:

  • 感谢您的回答,但由于从 IEnumerable(Of Integer) 转换为 List(Of Integer),.[Select] 和(如果我打开 Option Strict)在 Enumerable.Range(0, dataTable.Columns.Count) 上出现错误
  • @genespos...粘贴代码,不要换行。我使用换行符来提高可读性,您应该复制以下代码: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()
  • 谢谢!现在语法是正确的,但我注意到代码似乎只适用于String 的字段,而我同时拥有String 和Double 字段。有什么方法可以使代码也适用于Double 类型的字段?
  • @genespos...这仅适用于 String 字段,因为您编写了 OfType(Of String)。如果您希望代码适用于这两种类型,那么您可以查看Generic。
  • 谢谢。你真的很有帮助 (+1)
【解决方案2】:
'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

【讨论】:

  • 或者您可以使用 datagridview 并自动调整列的大小
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2017-06-30
相关资源
最近更新 更多