0

我使用查询结果生成 DataGridView。该查询生成大量列(超过 75 个)。显然 DataGridView 并没有显示所有这些。

我编写了一个从 DataGridView 中提取数据并生成 Excel 文件或 .csv 文件的小程序。

我觉得有趣的是,除了列标题之外,Excel 和 .csv 都是正确生成的!我的意思是:所有单元格都写入文件,列标题除外。

然后我发现,如果 DataGridView 没有可视化列标题,它就不会设置它们的值。

因此,我编写了以下可怕的代码来水平滚动 DataGridView,以便在 DataGridView 中可视化列标题并提取到 Excel 或 .csv 工作:

Friend Sub ScrollTheGridToSeeColumnHeaders(ByRef dgvTheGrid As DataGridView)
  If dgvTheGrid.RowCount = 0 Then
    Exit Sub
  End If
  dgvTheGrid.SuspendLayout()
  For i32ScorriCol As Int32 = 0 To dgvTheGrid.ColumnCount - 1 Step dgvTheGrid.DisplayedColumnCount(True)
    dgvTheGrid.FirstDisplayedScrollingColumnIndex = dgvTheGrid.Columns(i32ScorriCol).Index
    dgvTheGrid.Refresh()
  Next
  dgvTheGrid.ResumeLayout()
  dgvTheGrid.CurrentCell = dgvTheGrid(0, 0)
End Sub

这行得通,但对用户的影响真的很可怕(他看到网格滚动到最后,并认为他犯了某种严重的错误......)。

你有没有建议不要让所有这些列都以如此可怕的方式滚动?

提前谢谢了!

4

1 回答 1

1

这似乎是一大堆不必要的工作。在我的一个应用程序中,我有一个 datagridview,我为用户提供了“复制到 excel”的能力。代码非常简单。用户从 datagridview 中选择他们想要的所有行(当然,代码可以调整为只选择每一行),然后按“复制到 excel”,它会打开一个新的 excel 文档并粘贴整个选定的 datagridview在,标题和所有。

这是代码:

Try
    'Copy to the clipboard
    Clipboard.SetDataObject(Me.dgvTable.GetClipboardContent())
Catch ex As Exception
    MsgBox("Clipboard could not be accessed.  Please try again.", MsgBoxStyle.Critical)
End Try

'Create excel objects
Dim oExcel As Object
Dim oBook As Object
oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oBook = oExcel.Workbooks.Add

'Paste the stuff in
oBook.Worksheets(1).Range("A1").Select()
oBook.Worksheets(1).Paste()

希望这个对你有帮助!

于 2012-02-07T12:44:09.913 回答