日期:2014-05-18  浏览次数:20931 次

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;