c# DataGridView to Bitmap
-
Hello, everyone. We need to convert the table into a picture. The most obvious way I'm doing is to keep every single line of photographs on the sheet and then connect to one big picture. I wrote this code:
List<byte[]> rowList = new List<byte[]>(); //здесь сохраняем все строки for (int i = 0; i < OrderDataGrid.Rows.Count; i++) //вот тут всё идеально работает и прекрасно сохраняется //(исключение - если таблица не влезает вся в экран, вылазит исключение. Пока что, не знаю, как с этим разобраться) { OrderDataGrid.Rows[i].Selected = true; Size dgvSz = OrderDataGrid.ClientSize; int rw = OrderDataGrid.Rows[i].Index; Rectangle RowRect = OrderDataGrid.GetRowDisplayRectangle(rw, true); using (Bitmap bmpDgv = new Bitmap(dgvSz.Width, dgvSz.Height)) using (Bitmap bmpRow = new Bitmap(RowRect.Width, RowRect.Height)) { OrderDataGrid.DrawToBitmap(bmpDgv, new Rectangle(Point.Empty, dgvSz)); using (Graphics G = Graphics.FromImage(bmpRow)) { G.DrawImage(bmpDgv, new Rectangle(Point.Empty, RowRect.Size), RowRect, GraphicsUnit.Pixel); string DesktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); using (MemoryStream stream = new MemoryStream()) { bmpRow.Save(stream, ImageFormat.Bmp); rowList.Add(stream.ToArray()); } } } }
int TotalHeight = (OrderDataGrid.RowCount * OrderDataGrid.RowTemplate.Height) + OrderDataGrid.ColumnHeadersHeight; Bitmap result = new Bitmap(OrderDataGrid.ClientSize.Width, TotalHeight); result.SetResolution(100, 100); TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); Graphics g = Graphics.FromImage(result); int btmCount = 0; //счётчик bitmap for (int y = 0; y < TotalHeight - OrderDataGrid.RowTemplate.Height; y += OrderDataGrid.RowTemplate.Height) {//вот тут происходит какая-то странная магия и всё ломается. Не могу понять, в чём дело //Он выдаёт мне результат, но это просто 6 пустых строк using (Bitmap tempBitmap = (Bitmap)tc.ConvertFrom(rowList[btmCount])) { for (int x = 0; x < OrderDataGrid.ClientSize.Width; x += 1) { g.DrawImage(tempBitmap, x, y); } } btmCount++; } string DesktopFolder2 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); result.Save(Path.Combine(DesktopFolder2 + @"\Folder\", "datagridview.png"), ImageFormat.Png);
result:
-
Found in the google on the first reference... ♪ title of this issue
//Изменить высоту к оригинальной int height = dataGridView1.Height; dataGridView1.Height = dataGridView1.RowCount * dataGridView1.RowTemplate.Height;
//Создать битмап и врисовать туда DataGridView
Bitmap bitmap = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height);
dataGridView1.DrawToBitmap(bitmap, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height));//Изменить DataGridView назад к оригинальному размеру
dataGridView1.Height = height;//Сохранить в папку
bitmap.Save(@"D:\Images\DataGridView.png");
code taken with: https://www.aspsnippets.com/Articles/Convert-Export-DataGridView-to-Bitmap-PNG-Image-in-Windows-Forms-WinForms-Application-using-C-and-VBNet.aspx