for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
                {
                    {
                        //以下代表一行数据
                        NewRow["DEP_ID"] = 111;
                        NewRow["STAT_DATE"] = ds1.Tables[0].Rows[i]["FDTMDATE"].ToString().Replace(" 0:00:00", "");
                        NewRow["LOT"] = ds1.Tables[0].Rows[i]["FSTRSORT"].ToString();
                        NewRow["TEAM_ID"] = int.Parse(ds1.Tables[0].Rows[i]["FLNGREGULARID"].ToString());
                        NewRow["TEC_EQU_ID"] = 0;// int.Parse(ds1.Tables[0].Rows[i]["FLNGMACHINEID"].ToString());
                        NewRow["MAT_ID"] = int.Parse(ds1.Tables[0].Rows[i]["FLNGITEMID"].ToString());
                        NewRow["MAT_ENER_ID"] = int.Parse(ds1.Tables[0].Rows[i]["FLNGTOBACCOID"].ToString());
                        NewRow["QTY"] = double.Parse(ds1.Tables[0].Rows[i]["FSTRSUM"].ToString()) + double.Parse(ds1.Tables[0].Rows[i]["FDBLWEIGHT"].ToString());                        dt.Rows.Add(NewRow);
                    }该行已经属于此表。是SQL语句错误还是程序语句错误?                }

解决方案 »

  1.   


    //以下代表一行数据
    前面加一行:
    DataRow NewRow = new DataRow();
      

  2.   


    DataRow NewRow ;
    for   (int   i   =   0;   i   <   ds1.Tables[0].Rows.Count;   i++) 
                                    { 
                                            NewRow =dt.NewRow();
                                            { 
                                                    //以下代表一行数据 
                                                    NewRow["DEP_ID"]   =   111; 
                                                    NewRow["STAT_DATE"]   =   ds1.Tables[0].Rows[i]["FDTMDATE"].ToString().Replace("   0:00:00",   ""); 
                                                    NewRow["LOT"]   =   ds1.Tables[0].Rows[i]["FSTRSORT"].ToString(); 
                                                    NewRow["TEAM_ID"]   =   int.Parse(ds1.Tables[0].Rows[i]["FLNGREGULARID"].ToString()); 
                                                    NewRow["TEC_EQU_ID"]   =   0;//   int.Parse(ds1.Tables[0].Rows[i]["FLNGMACHINEID"].ToString()); 
                                                    NewRow["MAT_ID"]   =   int.Parse(ds1.Tables[0].Rows[i]["FLNGITEMID"].ToString()); 
                                                    NewRow["MAT_ENER_ID"]   =   int.Parse(ds1.Tables[0].Rows[i]["FLNGTOBACCOID"].ToString()); 
                                                    NewRow["QTY"]   =   double.Parse(ds1.Tables[0].Rows[i]["FSTRSUM"].ToString())   +   double.Parse(ds1.Tables[0].Rows[i]["FDBLWEIGHT"].ToString());                                                 dt.Rows.Add(NewRow); 
                                            } 
                                    }
      

  3.   

    5楼正解,如果想向DataTable添加新的行,必须调用NewRow(),如果只调用一次,你每次添加的都是同一行
      

  4.   


    int count = ds1.Tables[0].Rows.Count;  //实现取得count,不要每次再去计算。
    for   (int   i   =   0;   i   <  count;   i++) 
    {
     DataRow = dt.NewRow();  //注意:不是new DataRow。
    //以下代表一行数据 
     NewRow["DEP_ID"]   =   111; 
     NewRow["STAT_DATE"]   =   ds1.Tables[0].Rows[i]["FDTMDATE"].ToString().Replace("   0:00:00",   ""); 
     NewRow["LOT"]   =   ds1.Tables[0].Rows[i]["FSTRSORT"].ToString(); 
     NewRow["TEAM_ID"]   =   int.Parse(ds1.Tables[0].Rows[i]["FLNGREGULARID"].ToString()); 
     NewRow["TEC_EQU_ID"]   =   0;//   int.Parse(ds1.Tables[0].Rows[i]["FLNGMACHINEID"].ToString()); 
     NewRow["MAT_ID"]   =   int.Parse(ds1.Tables[0].Rows[i]["FLNGITEMID"].ToString()); 
     NewRow["MAT_ENER_ID"]   =   int.Parse(ds1.Tables[0].Rows[i]["FLNGTOBACCOID"].ToString()); 
     NewRow["QTY"] 
     = double.Parse(ds1.Tables[0].Rows[i]["FSTRSUM"].ToString()) + double.Parse(ds1.Tables[0].Rows[i]["FDBLWEIGHT"].ToString()); 
     dt.Rows.Add(NewRow); 
    }
    更好的方法是用foreach而不是 for(...)。foreach(DataRow row in ds1.Tables[0].Rows)
    {
      DataRow NewRow= dt.NewRow();  //注意:不是new DataRow。
    //以下代表一行数据 
     NewRow["DEP_ID"]   =   111; 
     NewRow["STAT_DATE"]   =   row["FDTMDATE"].ToString().Replace("   0:00:00",   ""); 
     NewRow["LOT"]   =   row["FSTRSORT"].ToString(); 
     NewRow["TEAM_ID"]   =   row["FLNGREGULARID"].ToString()); 
     NewRow["TEC_EQU_ID"]   =   0;//   int.Parse(row["FLNGMACHINEID"].ToString()); 
     NewRow["MAT_ID"]   =   int.Parse(row["FLNGITEMID"].ToString());  ...
     dt.Rows.Add(NewRow);
    }
      

  5.   

    >>我想知道怎麼用面向對象的知識解釋?这个题目好像比较大。这个与面向对象没什么问题吧。无非是将NewRow所指向的实例重新指向到DataTable.Rows这个集合中。每次NewRow,都是一个新的实例,NewRow就是在内存中的一个地址而已,每次指向不同内存空间,表示一个新的DataRow。
      

  6.   

    要用 DataROw newROw=dt.NewRow();
      

  7.   

    这个第一次是可以的,第二次就会报错的。一个对象只能加一次的。你同一个对象要加好多次当然会报错的。
    每次加要生成新的Row对象。
      

  8.   

    datatable中的行是不允许有相同的行的,如果循环的时候没有实例new一个新行的话,你添加的行每次都是同一个行,虽然你赋的值不同,但在内存中的地址是同一个的.
      

  9.   

    不需要用面向对象的知识解释,你反编译一下 DataTable 就知道了,一个 Row 就是一个引用类型 ArrayList,你获得的 Row 实际上是内部的某个 ArrayList 的引用。DataTable 一看你把同样引用的 Row(ArrayList)往表里添加第二遍,当然不行了,否则将来一修改就是两行,肯定不是用户预期的效果。
      

  10.   

    DataTable dt = new DataTable();
            DataRow dr;
            dt.Columns.Add(new DataColumn("name1", typeof(System.String)));
            //ListBox1.Items.Clear();
            ////把文件名逐一添加到列表框控件
            foreach (FileInfo fi in arrFile)
            {
                dr = dt.NewRow();
                dr[0] = fi.Name;
                dt.Rows.Add(dr);
                //ListBox1.Items.Add(fi.Name);
            }
    你这样子做,绝对不会错
      

  11.   

    复制表不要用循环,用copy System.Data.DataTable dt = new DataTable();
                System.Data.DataTable dt2= dt.Copy();
                //调整dt2的结构和数据用计算字段计算字段的用法,参考http://blog.csdn.net/jinjazz/archive/2008/04/08/2261721.aspx
      

  12.   

    datatable,datarow都是引用类型的,传递的是引用,所以修改的也是引用所指向的值,而copy直接在堆中(heap)开辟新的地址
      

  13.   

    DataTable dt = new DataTable();
      DataRow dr;
      dt.Columns.Add(new DataColumn("name1", typeof(System.String)));
      //ListBox1.Items.Clear();
      ////把文件名逐一添加到列表框控件
      foreach (FileInfo fi in arrFile)
      {
      dr = dt.NewRow();
      dr[0] = fi.Name;
      dt.Rows.Add(dr);
      //ListBox1.Items.Add(fi.Name);
      }
    你这样子做,绝对不会错