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

求教,关于打印datagridview 指定列的数据问题
如题,求教各位大侠,我想用小票打印机 打印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;
  }
  }

------解决方案--------------------
代码和思路上问题不大

只是因为你把两个东西混在一块写了,所以现在出了错,你不知道从那里开始调整

建议把数据提取 和 打印 过程分开。提取只管提取,打印只管打印,这样如果出错,你会明确知道到底是谁的错

 DataTable dt = (DataTable)dataGridView1.DataSource;
 DataTable print_dt=getData(dt);//把所有的提取数据的工作交给getData去做,你可以在调试的时候,看到print_dt的最终结果

Print(print_dt)//打印工作独立出来,前面已经保证数据正确,这里就只管打印界面本身就ok


------解决方案--------------------
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;
}
}
------解决方案--------------------
楼主是使用打印控件,还可以用Excel打印的。我都是将DataGridView写到Excel对象打印的,当然可以鼠标选择区域,只打印选定区域。