当前位置: 代码迷 >> .NET Framework >> ,打印DataGridView数据(或者datatable部分列)的类
  详细解决方案

,打印DataGridView数据(或者datatable部分列)的类

热度:79   发布时间:2016-05-02 00:46:36.0
求助,求一个打印DataGridView数据(或者datatable部分列)的类
各位大侠,小弟最近要打印一个DataGridView中每行的数据,或者说要打印一个DataTable中得部分列,

但是其中一些列的数据比较长,不可能打印预览看起来是一列一列的,遇到这些数据比较多的列呢,

要换一行打印,就相当于这样
第一行数据显示为:

列1 列2 列3 列4 列 5 
数据 数据 数据 数据 数据

列6:数据。。。。。。。
列7:数据。。。。。。。

第二行数据显示为:

列1 列2 列3 列4 列 5 
数据 数据 数据 数据 数据

列6:数据。。。。。。。
列7:数据。。。。。。。


就这样一行一行的打印dataGridView或DataTable部分列的数据

求一个算法或者循环绘制字符串的方法,想了一下午,纠结了,还得考虑字体大小的关系,还要考虑列数据对齐的关系,(每列列名要和该里的数据对齐)

------解决方案--------------------
多加一个页面用于打印,页面上放ReportViewer控件,根据向导设计一个report报表,在报表的详细内容区可以自由进行调整。
------解决方案--------------------
winform也是把ReportViewer控件拖到form上,点小三角-〉设计新报表,然后跟着向导走就可以。

参考资料都比较繁复,还不如动手先体验下再去看文档
演练:创建 ReportViewer 报表
C#报表控件ReportViewer rdlc 例
报表问题可以请教阿泰(babyt)
------解决方案--------------------
可以啊,用下面的代码可以在一个空的form上显示报表:
C# code
    private void Form1_Load(object sender, EventArgs e)    {        string conn = "server=xxx;database=xxxx;user=xxx;pwd=xxx";        string sql = "select * from xxxx";        var da = new SqlDataAdapter(sql, conn);        var dt = new DataTable();        da.Fill(dt);        var report = new ReportViewer { Dock = DockStyle.Fill};        this.Controls.Add(report);        var rds = new ReportDataSource("DataSet1", dt); // "DataSet1"是报表中指定的数据源        report.LocalReport.DataSources.Add(rds);        // 指定制作好的报表(rdlc文件)的名字        report.LocalReport.ReportEmbeddedResource = "ReportsApplication1.Report1.rdlc";        report.RefreshReport();    }
------解决方案--------------------
一个非常好的实例:


C#打印DataGridView 中的数据
------解决方案--------------------
C# code
I'm using DrawString...here's my code ... it's a bit messy right now but should do the job ;)private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)        {            int x = 0;            int y = 100;            int rowGap = 20;            int colGap = 5;            int leftMargin = 50;             int linesPerPage = e.MarginBounds.Height / _dataGridView.DefaultCellStyle.Font.Height;            Font font = new Font(_dataGridView.DefaultCellStyle.Font.FontFamily, _dataGridView.DefaultCellStyle.Font.Size);            Font headingFont = new Font("Arial", 10, FontStyle.Bold);            Font captionFont = new Font("Arial", 10, FontStyle.Bold);            Brush brush = new SolidBrush(Color.Black);            string cellValue = "";            e.Graphics.DrawString("Erstellt von " + ObjectStore.Account.UserName + " am " + DateTime.Now.ToLongDateString(), captionFont, brush, new PointF(50, 50));            e.Graphics.DrawString("Seite " + _pageNumber, captionFont, brush, new PointF(e.PageBounds.Width - 100, e.PageBounds.Height - 50));            int rowCount = _dataGridView.Rows.Count;            int colCount = _dataGridView.Columns.Count;            y += rowGap;            x = leftMargin;            foreach (DataGridViewColumn column in _dataGridView.Columns)            {                if(column.GetType() != typeof(DataGridViewButtonColumn) && column.GetType() != typeof(DataGridViewCheckBoxColumn))                {                    cellValue = column.HeaderText;                    e.Graphics.DrawString(cellValue, headingFont, brush, x, y);                    x += column.Width + colGap;                }            }            int count = 0;            for (int i = _rowPosition; i < _dataGridView.Rows.Count; i++)            {                y += rowGap;                x = leftMargin;                foreach (DataGridViewColumn column in _dataGridView.Columns)                {                    if (column.GetType() != typeof(DataGridViewButtonColumn) && column.GetType() != typeof(DataGridViewCheckBoxColumn))                    {                        cellValue = _dataGridView.Rows//emoticons/emotion-55.gif" alt="Idea" />.Cells[column.Index].Value.ToString();                        e.Graphics.DrawString(cellValue, captionFont, brush, x, y);                        x += column.Width + colGap;                        y = y + rowGap * (cellValue.Split(new char[] { '\r', '\n' }).Length - 1);                    }                }                _rowPosition++;                count++;                if (count > linesPerPage)                {                    break;                }            }            if (_rowPosition > linesPerPage && _rowPosition < _dataGridView.Rows.Count)            {                _pageNumber++;                e.HasMorePages = true;            }        }
  相关解决方案