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

これは非常に多くの不必要な作業のようです。私のアプリケーションの 1 つに datagridview があり、ユーザーに「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()

これが少し役立つことを願っています!

于 2012-02-07T12:44:09.913 に答える