实际上是报表统计,根据不同的选项来显示统计结果(如ComboBox中的Items有销售员汇总,销售部汇总....,每种统计类型所含的列名不一样.)又要根据DataTimePicker的值来筛选符合条件的统计结果.
我在实现的时候用的是DataTable绑定DataGrid,但是用了多个对应的DataTable.这样当ComboBox.SelectItem变化的时候,出现错误:
未处理的“System.ArgumentException”类型的异常出现在 system.windows.forms.dll 中。
其他信息: 数据网格表样式集合已包含具有同一映射名称的表样式。部分代码:
private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(this.comboBox1.SelectedItem.ToString().Trim()=="车间汇总")
{  
this.chejian();
}
if(this.comboBox1.SelectedItem.ToString().Trim()=="班组汇总")
{  
//this.dataGrid1.DataSource=null;
this.banzhu();
}
if(this.comboBox1.SelectedItem.ToString().Trim()=="机台汇总")
{
this.jitai();
}
}
private void chejian()
{
           string sendSQL1="SELECT 生产车间, COUNT(生产批次) AS 批数, SUM(生产数量) AS 生产数量,SUM(报废数量) AS 报废数量, SUM(单位面积 * 生产数量) AS 净积, SUM(毛积 * 生产数量) AS 毛积, SUM(单价 * 生产数量) AS 金额 FROM guideb!生产记录 where 生产时间 between "+this.dateTimePicker1.Value+" and "+this.dateTimePicker2.Value+"  GROUP BY 生产车间";
  temp=this.link.SelectDataBase(sendSQL1);
  this.setTableStyle();

}
private void banzhu()
{
string sendSQL1="SELECT 生产班组, COUNT(生产批次) AS 批数, SUM(生产数量) AS 生产数量,SUM(报废数量) AS 报废数量, SUM(单位面积 * 生产数量) AS 净积, SUM(毛积 * 生产数量) AS 毛积, SUM(单价 * 生产数量) AS 金额 FROM guideb!生产记录 where 生产时间 between "+this.dateTimePicker1.Value+" and "+this.dateTimePicker2.Value+" GROUP BY 生产班组";
 temp=this.link.SelectDataBase(sendSQL1);
            this.setTableStyle();

}
private void jitai()
{

string sendSQL1="SELECT 生产机台, COUNT(生产批次) AS 批数, SUM(生产数量) AS 生产数量,SUM(报废数量) AS 报废数量, SUM(单位面积 * 生产数量) AS 净积, SUM(毛积 * 生产数量) AS 毛积, SUM(单价 * 生产数量) AS 金额 FROM guideb!生产记录 where 生产时间 between "+this.dateTimePicker1.Value+" and "+this.dateTimePicker2.Value+" GROUP BY 生产机台";
    temp=this.link.SelectDataBase(sendSQL1);
                this.setTableStyle();

}
private void setTableStyle()
{

this.dataGrid1.DataSource = temp;
    DataGridTableStyle ts = new DataGridTableStyle();//设置表格模式
DataGridTextBoxColumn aColumnTextColumn;
ts.AllowSorting = false;
ts.AlternatingBackColor = Color.LightGray;      //交替显示
ts.MappingName = temp.TableName;
int numCols = temp.Columns.Count;
for (int i = 0;i< numCols;i++)
{
aColumnTextColumn = new DataGridTextBoxColumn();
aColumnTextColumn.Width = 110;
aColumnTextColumn.ReadOnly=true;
aColumnTextColumn.Alignment=System.Windows.Forms.HorizontalAlignment.Right;
aColumnTextColumn.MappingName = temp.Columns[i].ColumnName;
aColumnTextColumn.HeaderText =temp.Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "N"; //设置为数字格式显示
ts.GridColumnStyles.Add(aColumnTextColumn);
}
this.dataGrid1.TableStyles.Add(ts);

}
private void dataGrid1_dataSouceChanged(object sender,System.EventArgs e)
{
this.dataGrid1.DataSource=null;?????
}另外程序中没有用到DataSET,如何打印对应的报表类型???

解决方案 »

  1.   

    where 生产时间 between "+this.dateTimePicker1.Value+" and "+this.dateTimePicker2.Value+"  GROUP BY 生产车间"
    -------------------------------------------------------------------
    时间两边要加引号吧?
    where 生产时间 between '"+this.dateTimePicker1.Value+"' and '"+this.dateTimePicker2.Value+"'"  
      

  2.   

    问题描叙:数据网格表样式集合已包含具有同一映射名称的表样式。
    考虑情况:检查你的DataGridColumnStyle的对象,可能存在同名的情况。及datagrid的样式定义。
      

  3.   

    to:Radar2006() 
    时间格式不用加''to:wxm4585(我坐在一颗一亿八千万年的石头上,看了一下午的MSDN)
    好像也不是属于这个方面的问题.我改了DataGridTableStyle变量也还是同样的错误.在线等....
    好过五一啊
      

  4.   

    是DataGridColumnStyle啊,错误已经很明显了啊,数据网格表样式集合已包含具有同一映射名称的表样式。
      

  5.   

    先把datasource清空,再把tablesytle清空。