读书人

datagridview 打印,该怎么处理

发布时间: 2012-05-03 14:06:56 作者: rapoo

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;        } 

读书人网 >C#

热点推荐