+ -
当前位置:首页 → 问答吧 → 求救!令人蛋碎的打印循环

求救!令人蛋碎的打印循环

时间:2011-12-09

来源:互联网

循环打印,DataGridView内,数量列分别为:2和4,列的和为6,打印6个边框,没问题。信息放入代码测试也没问题。

data_list.Rows[j].Cells[6] = ? 代表这行需要打印几次。



打印行内容的时候,出错。入下图,因为既要遍历DGV内的所有行,又要循环每行需要打印几个,又要计算打印的位置。现在不但位置不对,只出了第一条打印内容,应该是2个内容块,打印数量也不对。

边框打印没问题,但是内容打印的时候就出错了,如下图。应该是循环嵌套出了问题,但是实在是找不到哪里错了,求各位高人帮忙看看。


C# code

private void OnPrintPage(object sender, PrintPageEventArgs e)
        {
           Graphics g = e.Graphics;//初始化边框
             int x = 50; //商品信息打印的开始横坐标
             int y = 60; //商品信息打印的开始纵坐标
             int border_x = 40;  //价签边框打印的开始横坐标;
            int border_y = 40;  //价签边框打印的开始纵坐标;
            int border_w = 110;  //价签边框的宽度;
            int border_h = 150;  //价签边框的高度;
            int sums = 0;//"数量"列求合变量

//边框打印
            for (int z = 0; z < data_list.Rows.Count - 1; z++)
            {
                sums = sums + int.Parse(data_list.Rows[z].Cells[6].Value.ToString().Trim());
                //计算第七列字段“数量”列的和,计算需要打印的边框数
            }

            for (int i = 0; i < sums; i++)
            {  
                //边框位置计算,每行10个格,打印10格后换行
                if (i % 10 == 0)
                {
                    if (i == 0)
                    {  
                        //首格位置
                        border_x = 40;
                        border_y = 40;
                    }
                    else
                    {     
                        //10格换行
                        border_x = 40;
                        border_y = border_y + border_h;
                    }
                }
                else
                {                   
                    //打印一个格后,右移动坐标
                    border_x = border_x + border_w;
                }
                g.DrawRectangle(new Pen(Color.Black, 1), border_x, border_y, border_w, border_h);  
            }

//内容打印
            for (int j = 0; j < data_list.Rows.Count - 1; j++)
            {
                //循环遍历DataGridView中的所有行
                foreach (object cell in data_list.Rows[j].Cells)
                {                  
                    //判断DataGridView是否为空
                    DataGridViewCell d = (DataGridViewCell)cell;
                    if (d.Value == null)
                    {
                        MessageBox.Show("数据输入不完整", "错误提示", MessageBoxButtons.OK);
                        return;
                    }

                    //取得DATAGRIDVIEW单行的内容
                   //将单行信息放入控件,代码多略过

                   t_text.Text =  ;         
                   string lines = t_text.Text;
            
                    //循环取每行的打印位置
                    for (int k = 1; k < sums - 1; k++)
                    {
                        //换行打印

                        if (k % 10 == 0)
                        {
                            if (k == 0)
                            {
                                //首格位置打印位置    
                                x = 50;
                                y = 60;
                            }
                            else
                            {
                                //10个打印内容块换行
                                x = 50;
                                y = y + border_h;
                            }
                        }
                        else
                        {
                            //打印一个块内容后,右移动坐标 
                            x = x + border_w;
                        }
     for (int p = 0; p < int.Parse(data_list.Rows[j].Cells[6].Value.ToString()); p++)
                        {
                         //单条记录需要打印的数量
                            e.Graphics.DrawString(lines, new Font("Arial", 7), Brushes.Black, x, y);
                        }                    
}
                }
            }

作者: zln0118   发布时间: 2011-12-09

作者: HHQSY   发布时间: 2011-12-09

用Reporting里面的控件多好

作者: c02645   发布时间: 2011-12-09

相关阅读 更多