2012-02-06 4 views
0

クエリの結果を使用してDataGridViewを生成します。 このクエリは、多くの列(75以上)を生成します。明らかに、DataGridViewはそれらのすべてを表示しません。グリッド全体をスクロールせずにDataGridView ColumnHeaders値を取得

DataGridViewからデータを抽出し、Excelファイルまたは.csvファイルを生成する小さな手順を記述しました。

私が面白いと思うのは、Excelと.csvの両方が列見出しを除いて正しく生成されていることです。つまり、ALL CELLSは列見出しのファイル以外に書き込まれます。

次に、DataGridViewが列ヘッダーを視覚化しないと、値を設定しないことがわかりました。

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 

これは動作しますが、ユーザーへの影響がある:その列ヘッダーがExcelまたは.csvへのDataGridViewと抽出に可視化されるように

は、だから私は働く水平方向のDataGridViewをスクロールするには、次の恐ろしいコードを書きました本当に恐ろしい(彼はグリッドが最後までスクロールするのを見て、何か悪い間違いをしたと思っている...)。

これらの列がすべてこのような恐ろしい方法でスクロールせずにこのトリックを行うように提案がありますか?

事前に感謝します。

+0

DataGridViewはDataSetのようなものにバインドされていますか?データはどこにありますか? –

+0

DatagridViewはバインドされていません。これは、SQL Server DBからデータを読み取るDataReaderからのデータから構築されます。 EndUserが抽出を行うことを決定すると、DataReaderは閉じられます。 –

答えて

1

これは非常に不必要な作業のようです。私のアプリケーションの1つでは、私はdatagridviewを持っています。そして、私は "コピーするExcel"をユーザに提供します。コードはかなり簡単です。ユーザーは、データグリッドビューから必要な行をすべて選択します(もちろん、各行を1つだけ選択するようにコードを微調整することもできます)。「コピーして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() 

が、これは少し役に立てば幸い!

+0

本当に素晴らしいコードです。しかし、それは私の "問題"を解決しません:私のグリッドは75以上のフィールドが含まれており、私はユーザーにそれらのすべてを抽出する能力を提供する必要があります。 75列と1000行以上の列を選択するのは「ユーザーフレンドリー」ではありません:-) –

+0

コピーする行/列をExcelで選択するのではなく、プログラマチックにそれを選択してユーザー? – Boeckm

+0

私のプログラムの別の部分では、ユーザーにあなたの言うことをさせる。ユーザーが表示するのに十分な数のフィールドを選択した場合、問題は依然として残ります。列見出しは、グリッドが表示されるまでExcelに報告されません。もう一つの選択肢があります:ユーザーがグリッド上の列を選択させるようにしますが、これは時間がかかりすぎます。 –

関連する問題