如题,求教各位大侠,我想用小票打印机 打印datagridview1 中部分列的内容,使用部分代码如下,提示错误:当前上下文中不存在名称“column”
还有一个警告:空语句可能有错误似乎存在写法的错误,求各位大侠指正。谢谢~~        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            DataTable dt = (DataTable)dataGridView1.DataSource;
            int x = 30, y = 0, kuan = 70, gao = 25;
            Font ff = new Font("宋体", 10);
            e.Graphics.DrawString("超市发货单", ff, Brushes.Blue, x, y);
            y += gao;
            foreach (DataColumn column in dt.Columns(商品名称DataGridViewTextBoxColumn, 单位DataGridViewTextBoxColumn, 数量DataGridViewTextBoxColumn, 售价DataGridViewTextBoxColumn, 总价DataGridViewTextBoxColumn)) ;
            {
                e.Graphics.DrawString(column.ColumnName, ff, Brushes.Black, x, y);
                x += kuan;
            }
            y += gao;
            x = 30;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    e.Graphics.DrawString((string)dt.Rows[i].ItemArray[j].ToString(), ff, Brushes.Black, x, y);
                    x += kuan;
                }
                x = 30;
                 y += gao;
            }
        }

解决方案 »

  1.   

       DataTable dt = new DataTable();
                foreach (DataColumn column in dt.Columns)
                {
                    switch (column.ColumnName)
                    {
                        case "商品名称DataGridViewTextBoxColumn":
                        case "单位DataGridViewTextBoxColumn":                        break;
                        default:
                            continue;
                    }
                }
    这样试试
      

  2.   

    代码和思路上问题不大只是因为你把两个东西混在一块写了,所以现在出了错,你不知道从那里开始调整建议把数据提取 和 打印 过程分开。提取只管提取,打印只管打印,这样如果出错,你会明确知道到底是谁的错 DataTable dt = (DataTable)dataGridView1.DataSource;
     DataTable print_dt=getData(dt);//把所有的提取数据的工作交给getData去做,你可以在调试的时候,看到print_dt的最终结果Print(print_dt)//打印工作独立出来,前面已经保证数据正确,这里就只管打印界面本身就ok
      

  3.   

    foreach (DataColumn column in dt.Columns)
      {
           switch (column.ColumnName)
      {
          case "商品名称DataGridViewTextBoxColumn":
          case "单位DataGridViewTextBoxColumn":
             e.Graphics.DrawString(column.ColumnName, ff, Brushes.Black, x, y);
          x += kuan;
          break;
          default:
      continue; 
      }
      y += gao;
      x = 30;
      for (int i = 0; i < dt.Rows.Count; i++)
      {
      for (int j = 0; j < dt.Columns.Count; j++)
      {
                switch (column.ColumnName)
      {
          case "商品名称DataGridViewTextBoxColumn":
          case "单位DataGridViewTextBoxColumn":
      e.Graphics.DrawString((string)dt.Rows[i].ItemArray[j].ToString(), ff, Brushes.Black, x, y);
      x += kuan;
                        break;
                    default :
                        continue;
      }
      x = 30;
      y += gao;
      }
      }
      

  4.   

    楼主是使用打印控件,还可以用Excel打印的。我都是将DataGridView写到Excel对象打印的,当然可以鼠标选择区域,只打印选定区域。
      

  5.   

    额....按照五楼大侠的代码...我把
    case "商品名称DataGridViewTextBoxColumn":
    case "单位DataGridViewTextBoxColumn":  
    改成
    case "商品名称":  
    case "单位":
    应该是这么写的,这个应该是列的名称,能打出来了,不过打成 数据库中 每个字段一行...而不是当前datagridview 的表格形式  ,是不是我的换行的命令那里有问题....代码如下:
    foreach (DataColumn column in dt.Columns)
                {
                    switch (column.ColumnName)
                    {
                        case "商品名称":
                        case "单位":
                            e.Graphics.DrawString(column.ColumnName, ff, Brushes.Black, x, y);
                            x += kuan;
                            break;
                        default:
                            continue;
                    }
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {                    for (int j = 0; j < dt.Columns.Count; j++)
                        {
                            switch (column.ColumnName)
                            {
                                case "商品名称":
                                case "单位":
                                    e.Graphics.DrawString((string)dt.Rows[i].ItemArray[j].ToString(), ff, Brushes.Black, x, y);
                                    x += kuan;
                                    break;
                                default:
                                    continue;
                            }
                            x = 30;
                            y += gao;
                        }
                    }
                }