获取DataGridView ColumnHeaders值而不滚动整个网格

时间:2012-02-06 15:29:32

标签: vb.net datagridview export-to-excel export-to-csv

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

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

我觉得有趣的是Excel和.csv都是正确生成的,除了列标题!我的意思是:所有CELLS都写入文件EXCEPT以获取列标题。

然后我发现如果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

这样可行,但对用户的影响实在太可怕了(他看到网格滚动到最后并认为他犯了一些错误......)。

如果没有所有这些列以如此糟糕的方式滚动,你有没有建议去做这个技巧?

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

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

以下是代码:

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

希望这有点帮助!