C# 选项卡页内的datagridview到位图

C# 选项卡页内的datagridview到位图,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个dataGridView,它位于选项卡页面中。现在我需要创建dataGridView的一个映像,但我在网上查找解决方案,发现DrawToBitmap,但它只获取dataGridView的一部分 这就是我现在使用的代码 bm = new Bitmap(this.dataGridView2.Width, this.dataGridView2.Height); dataGridView2.DrawToBitmap(bm,new Rectangle(100,100, his.dataGridVi

我有一个dataGridView,它位于选项卡页面中。现在我需要创建dataGridView的一个映像,但我在网上查找解决方案,发现DrawToBitmap,但它只获取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);

下面是一个示例,如何将
DataGridView
适配到
位图上,即使的内容大于
DataGridView
选项卡页
甚至
表单

诀窍是
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;
Size oldsize=dataGridView1.ClientSize;
var tw=dataGridView1.Columns.Cast().Select(x=>x.Width.Sum();
var th=dataGridView1.Rows.Cast().Select(x=>x.Height.Sum();
dataGridView1.ClientSize=新大小(tw+dataGridView1.RowHeadersWidth,
th+DataGridViews 1.ColumnHeadershight);
位图bmp=新位图(dataGridView1.ClientSize.Width,dataGridView1.ClientSize.Height);
使用(Graphics G=Graphics.FromImage(bmp))
dataGridView1.DrawToBitmap(bmp,dataGridView1.ClientRectangle);
保存(文件名,ImageFormat.Png);
dataGridView1.ClientSize=oldsize;

如果要在其周围填充,只需将
位图
变得更大,并明确写出目标矩形的坐标,而不是使用
ClientRectangle

下面是一个示例,如何将
DataGridView
适配到
位图上,即使的内容大于
DataGridView
选项卡页
甚至
表单

诀窍是
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;
Size oldsize=dataGridView1.ClientSize;
var tw=dataGridView1.Columns.Cast().Select(x=>x.Width.Sum();
var th=dataGridView1.Rows.Cast().Select(x=>x.Height.Sum();
dataGridView1.ClientSize=新大小(tw+dataGridView1.RowHeadersWidth,
th+DataGridViews 1.ColumnHeadershight);
位图bmp=新位图(dataGridView1.ClientSize.Width,dataGridView1.ClientSize.Height);
使用(Graphics G=Graphics.FromImage(bmp))
dataGridView1.DrawToBitmap(bmp,dataGridView1.ClientRectangle);
保存(文件名,ImageFormat.Png);
dataGridView1.ClientSize=oldsize;

如果要在其周围填充,只需将
位图
变得更大,并明确写出目标矩形的坐标,而不是使用
ClientRectangle

不要使用
100100
而使用
0,0
@RezaAghaei这只是一个填充如果您需要在图形周围添加任何填充,请将填充也添加到位图大小<代码>变量填充=100;var bm=新位图(dataGridView1.Width+2*填充,dataGridView1.Height+2*填充)
不要使用
100100
使用
0,0
@RezaAghaei这只是一个填充如果您需要在图形周围添加任何填充,也可以将填充添加到位图大小<代码>变量填充=100;var bm=新位图(dataGridView1.Width+2*填充,dataGridView1.Height+2*填充)