【问题标题】:Building DataGridView Display in Code (VB 2010 NET)在代码中构建 DataGridView 显示(VB 2010 NET)
【发布时间】:2014-05-27 21:47:16
【问题描述】:

我正在从 Excel 电子表格中提取信息并尝试在代码中构建 DataGridView。我发现this information 很有帮助。在调试中,一切似乎都是正确的。我的列数和行数正确,但 DataGridView 上没有显示任何内容。为什么?这真是令人沮丧。

Dim dTable as New DataTable
For Each currcol As Excel.Range In inputRange.Columns
    dTable.Columns.Add(currcol.Value2, GetType(String))
Next

inputRange = objXLWs.Range("A" & HeaderRow + 1 & ":" & EndingColumn & EndingRow)
Dim i as Integer
For Each row As Excel.Range In inputRange.Rows
    Dim dataRow As DataRow = dTable.NewRow()
    i=0
    For Each incell As Excel.Range In row.Columns
        dataRow(i) = incell.Value2
        i += 1
    Next
    dTable.Rows.Add(dataRow)
Next

bs4DataPreview.DataSource = dTable         ' Set up BindingSource
dgv4PreviewData.AutoGenerateColumns = False
dgv4PreviewData.DataSource = bs4DataPreview
dgv4PreviewData.Show()
dgv4PreviewData.Refresh()

编辑源代码以反映 DataTable 的使用。在 DataGridView 上仍然一无所获。

【问题讨论】:

  • 将datagridview绑定到iList?试试DataTable。虽然从未尝试过,但您的 String() 是一个数组,而不是 iEnumerable
  • 您的 inputRange 是否正确?这个"A" & HeaderRow + 1 & ":" & EndingColumn & EndingRow 会导致什么结果?
  • 我感兴趣的数据在标题行之后,可能不是第 1 行。同样,列数是可变的。我从这个美丽中得到了最后一行: Dim EndingRow As Integer = objXLWs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row
  • 我同意猪排,请使用 DataTable 作为您的 DataSource。
  • 从使用 List(of String) 更改为 DataTable。结果一样!即使从调试模式查看时一切看起来都是正确的,DataGridView 中也没有显示任何内容。

标签: vb.net winforms datagridview


【解决方案1】:

自从最初提出这个问题以来已经有很长时间了。我继续解决这个问题,最后想出了一个可行的解决方案。它需要在 DataTable 中构建更多智能。

Dim inputRange As Excel.Range
Dim i As Integer

BuildPreview = False
EndingColumn = ColumnIndexToColumnLetter(EndingColumnNo)
EndingRow = objXLWs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row

inputRange = objXLWs.Range("A" & HeaderRow & ":" & EndingColumn & HeaderRow)
i = 1
For Each currcol As Excel.Range In inputRange.Columns
    Dim column As New DataColumn

    column.DataType = GetType(String)
    column.ColumnName = "Column" & i.ToString
    column.Caption = NS(currcol.Value2)
    dTable.Columns.Add(column)
    i += 1
Next

inputRange = objXLWs.Range("A" & HeaderRow + 1 & ":" & EndingColumn & Math.Min(EndingRow, HeaderRow + previewRows))
For Each row As Excel.Range In inputRange.Rows
    Dim dataRow As DataRow = dTable.NewRow()
    i = 1
    For Each incell As Excel.Range In row.Columns
        dataRow("Column" & i.ToString) = NS(incell.Value2)
        i += 1
    Next
    dTable.Rows.Add(dataRow)
Next

我希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多