2016-06-21 13 views
1

私はTabPageの内部にあるdataGridViewを持っています。今私はdataGridViewのイメージを作成する必要がありますが、私は解決策をオンラインで見て、私はDrawToBitmapを見つけましたが、それはdataGridViewの一部を取るだけです。タブページからビットマップ内へのdatagridview

これは私が今ここで

bm = new Bitmap(this.dataGridView2.Width, this.dataGridView2.Height); 
dataGridView2.DrawToBitmap(bm,new Rectangle(100,100, his.dataGridView1.Width, this.dataGridView1.Height)); 
e.Graphics.DrawImage(bm, 0, 0); 
+0

「100,100」の代わりに「0,0」を使用してください。 –

+0

@RezaAghaei thats just padding –

+0

図面の周りにパディングが必要な場合は、パディングもビットマップサイズに追加してください。 'var padding = 100; var bm = newビットマップ(dataGridView1.Width + 2 *パディング、dataGridView1.Height + 2 *パディング); ' –

答えて

0

を使用していたコードでは、その内容がDataGridViewまたはTabPage、あるいはより大きい場合、BitmapにさえDataGridViewに合うようにする方法の例ですForm

トリックは、一時的ににあるすべてのセルが収まると何のスクロールバーが存在しないようにDrawToBitmapコールのためDataGridViewを拡大します。その後戻ってあなたのレイアウトに合ったオリジナルのサイズに設定します..:

Size oldsize = dataGridView1.ClientSize; 
var tw = dataGridView1.Columns.Cast<DataGridViewColumn>().Select(x => x.Width).Sum(); 
var th = dataGridView1.Rows.Cast<DataGridViewRow>().Select(x => x.Height).Sum(); 

dataGridView1.ClientSize = new Size(tw + dataGridView1.RowHeadersWidth, 
            th + dataGridView1.ColumnHeadersHeight); 

Bitmap bmp = new Bitmap(dataGridView1.ClientSize.Width, dataGridView1.ClientSize.Height); 

using (Graphics G = Graphics.FromImage(bmp)) 
     dataGridView1.DrawToBitmap(bmp, dataGridView1.ClientRectangle); 

bmp.Save(yourFilename, ImageFormat.Png); 

dataGridView1.ClientSize = oldsize; 

あなたはその周りにパディングをしたい場合は、単にまだBitmapをさらに大きくすると、明示的にターゲット矩形の座標を書き出すことができ、 ClientRectangleを使用する代わりに

関連する問題