Получить значения DataGridView ColumnHeaders без прокрутки всей сетки - PullRequest
0 голосов
/ 06 февраля 2012

Я генерирую 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

Это работает, но эффект для пользователя действительно ужасен (он видит, что сетка прокручивается до конца, и думает, что совершил какую-то грубую ошибку ...).

У вас есть предложение сделать трюк без прокрутки всех этих столбцов таким ужасным образом?

Большое спасибо заранее!

1 Ответ

1 голос
/ 07 февраля 2012

Это кажется ужасной ненужной работой.В одном из моих приложений у меня есть сетка данных, и я предоставляю пользователю возможность «копировать в Excel».Код довольно прост.Пользователь выбирает все строки, которые он хочет, из таблицы данных (конечно, код может быть изменен, чтобы просто выбрать каждую отдельную строку), и он нажимает «копировать в Excel», и он открывает новый документ Excel и вставляет весь выбранный вид таблицы данных.в, заголовки и все.

Вот код:

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

Надеюсь, это поможет немного!

...