datagridview 打印
有没有人会datagridview 打印,需要调用打印机纸张设置页面。不同的纸张有不同的打印预览。
[解决办法]
你的难点是打印DGV还是打印设置或者预览?
打dgv有点复杂,要画线,要算位置,要考虑是不是需要自动伸缩列高等。
打印设置,.NET有组件,调一下赋值给printdoc对象即可
预览的话,画到printpreview组件里即可
[解决办法]
参考:
http://news.cnblogs.com/question/7370/
http://blog.csdn.net/pfworld/archive/2008/01/22/2058746.aspx
[解决办法]
新建一个winform窗体,工具栏里你就能看到:
PrintPreview控件
PageSetupDialog控件~
[解决办法]
可以使用长江支流的打印组件, 或者参考C# WinForm开发系列 - DataGrid/DataGridView
[解决办法]
顶 关注一下
[解决办法]
用printDocument
参考
参考
[解决办法]
关注 我只做过普通打印 没 写过带 设置的
[解决办法]
我一般都是导到excel里,呵呵
[解决办法]
你给的分真少~打印DataGridView
- C# code
private void DrawDataGridView(DataGridView d, Graphics g, ref int startRowIndex) { Rectangle r = GetControlRect(d); if (d.ColumnHeadersDefaultCellStyle.BackColor != Color.White) g.FillRectangle(new SolidBrush(d.ColumnHeadersDefaultCellStyle.BackColor), r.X, r.Y, r.Width, d.ColumnHeadersHeight); float colWidth = 0; for (int j = 0; j < d.Columns.Count; j++) { if (d.Columns[j].Visible) colWidth += d.Columns[j].Width; //((float)d.Columns[i].Width /(float)d.Width ) } int startPx = r.X; int[] ColumnWidth = new int[d.Columns.GetColumnCount(DataGridViewElementStates.Visible)]; DataGridViewColumn column = d.Columns.GetFirstColumn(DataGridViewElementStates.Visible); int idx = 0; while (column != null) { Rectangle rtxt = new Rectangle(startPx, r.Y, (int)(((float)column.Width / colWidth) * d.Width), d.ColumnHeadersHeight); ColumnWidth[idx] = rtxt.Width; startPx += rtxt.Width; SizeF sf = g.MeasureString(column.HeaderText, d.ColumnHeadersDefaultCellStyle.Font, rtxt.Width); switch (d.ColumnHeadersDefaultCellStyle.Alignment) { case DataGridViewContentAlignment.BottomCenter: case DataGridViewContentAlignment.MiddleCenter: case DataGridViewContentAlignment.TopCenter: if (sf.Width <= rtxt.Width && sf.Height <= rtxt.Height) { rtxt = new Rectangle(rtxt.X + (rtxt.Width - (int)sf.Width) / 2, rtxt.Y + (rtxt.Height - (int)sf.Height) / 2, (int)sf.Width + 1, (int)sf.Height + 1); } break; default: if (sf.Height < rtxt.Height) { rtxt = new Rectangle(rtxt.X, rtxt.Y + (rtxt.Height - (int)sf.Height) / 2, (int)sf.Width + 1, (int)sf.Height + 1); } break; } g.DrawString(column.HeaderText, d.ColumnHeadersDefaultCellStyle.Font, new SolidBrush(d.ColumnHeadersDefaultCellStyle.ForeColor), rtxt); column = d.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None); idx++; } if (startRowIndex < 0 || startRowIndex >= d.Rows.Count) return; SolidBrush cellcolor = new SolidBrush(d.DefaultCellStyle.ForeColor); //for (int i = 0; i < rowCount; i++) int i = 0; int h1 = d.ColumnHeadersHeight + r.Top; while (h1 <= r.Bottom) { if (i + startRowIndex >= d.Rows.Count) { if (h1 + d.RowTemplate.Height < r.Bottom) { g.DrawLine(_pen, r.X, h1, r.Right, h1); h1 += d.RowTemplate.Height; continue; } else break; } int maxh = d.RowTemplate.Height; column = d.Columns.GetFirstColumn(DataGridViewElementStates.Visible); while (column != null) { DataGridViewCell dvc = d.Rows[i + startRowIndex].Cells[column.Index]; string s = dvc.FormattedValue.ToString(); SizeF sf = g.MeasureString(s, dvc.Style.Font == null ? d.DefaultCellStyle.Font : dvc.Style.Font, column.Width); int th1 = (int)sf.Height; if (th1 >= maxh) maxh = th1 + d.RowTemplate.DividerHeight; column = d.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None); } if (h1 + maxh >= r.Bottom) break; startPx = r.X; idx = 0; column = d.Columns.GetFirstColumn(DataGridViewElementStates.Visible); while (column != null) { DataGridViewCell dvc = d.Rows[i + startRowIndex].Cells[column.Index]; string s = dvc.FormattedValue.ToString(); SizeF sf = g.MeasureString(s, dvc.Style.Font == null ? d.DefaultCellStyle.Font : dvc.Style.Font, ColumnWidth[idx]); Rectangle rtxt = new Rectangle(startPx, h1 + 2, ColumnWidth[idx], d.RowTemplate.Height); int th1 = (int)sf.Height; if (th1 >= maxh) maxh = th1 + d.RowTemplate.DividerHeight; rtxt.Height = maxh - 2; switch (column.DefaultCellStyle.Alignment) { case DataGridViewContentAlignment.NotSet: case DataGridViewContentAlignment.BottomLeft: case DataGridViewContentAlignment.TopLeft: case DataGridViewContentAlignment.MiddleLeft: case DataGridViewContentAlignment.BottomCenter: case DataGridViewContentAlignment.MiddleCenter: case DataGridViewContentAlignment.TopCenter: g.DrawString(s, column.DefaultCellStyle.Font == null ? d.DefaultCellStyle.Font : column.DefaultCellStyle.Font, cellcolor, (RectangleF)rtxt); break; case DataGridViewContentAlignment.BottomRight: case DataGridViewContentAlignment.MiddleRight: case DataGridViewContentAlignment.TopRight: g.DrawString(s, column.DefaultCellStyle.Font == null ? d.DefaultCellStyle.Font : column.DefaultCellStyle.Font, cellcolor, (RectangleF)rtxt, new StringFormat(StringFormatFlags.DirectionRightToLeft)); break; } startPx += ColumnWidth[idx]; column = d.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None); idx++; } if (h1 + maxh < r.Bottom) { g.DrawLine(_pen, r.X, h1, r.Right, h1); h1 += maxh; } else { break; } i++; } //int rowCount = (d.Height - d.ColumnHeadersHeight) / d.RowTemplate.Height; r.Height = h1 - r.Top; //rowCount * d.RowTemplate.Height + d.ColumnHeadersHeight; if (d.BorderStyle != BorderStyle.None) g.DrawRectangle(_pen, r); g.DrawRectangle(_pen, r.X, r.Y, r.Width, d.ColumnHeadersHeight); startPx = r.Left; for (int j = 0; j < ColumnWidth.Length; j++) { Rectangle rtxt = new Rectangle(startPx, r.Y, ColumnWidth[j], d.ColumnHeadersHeight); g.DrawLine(_pen, startPx, r.Y, startPx, r.Bottom); startPx += ColumnWidth[j]; } startRowIndex += i; }