今天在做练习。涉及到两个DataTable的合并问题这是代码                //SQL语句返回的DataTable
                DataTable SQLDT = roomInfoManage.findAll().Tables[0];
                //Excel返回的DataTable
                DataTable ExcelDT = Excel.ExcelHandle.getImportExcel(filePath, "Sheet1", 6);
                SQLDT.Merge(ExcelDT); //合并两个DataTable
                dgvRoomInfo.DataSource = SQLDT;
SQLDT 和 ExcelDT 不管它,只需要知道 一个是SQL语句返回的DataTable  一个是导入Excel的DataTable这两个DataTable有完全相同的表结构我将这两个DataTable使用Merge方法合并起来了接着用DataGridView的数据源绑定输出。可是显示这个求助怎么解决

解决方案 »

  1.   

    这个问题是因为两个DataTable的字段名不同导致的,你可以列举另一个DataTable的Columns,然后把字段名都改成第一个DataTable的字段名,就可以了,
      

  2.   

    SQLDT 和 ExcelDT  这两个Datatable其对应列的Name是一致的吗?把Column1,Column2,Column3...列名称改成其对应的列名//ExcelDT.Columns["Column2"].Name="房间类型"; 
    ...
      

  3.   


    Dt1 = MergeDataTable(Dt1, Dt2, "ID");下面是函数定义:
    //dt1       要合并的DataTable1
    //dt2       要合并的DataTable2
    //keyColName     dt1与dt2联系的关键列名
    private DataTable MergeDataTable(DataTable dt1, DataTable dt2, String KeyColName)
    {
     //定义临时变量
     DataTable dtReturn = new DataTable();
     int i=0;
     int j=0;
     int k=0;
     int colKey1=0;
     int colKey2=0; //设定表dtReturn的名字
     dtReturn.TableName = dt1.TableName;
     //设定表dtReturn的列名
     for(i=0; i<dt1.Columns.Count; i++){
      if( dt1.Columns[i].ColumnName == KeyColName ){
       colKey=i;
      }
      dtReturn.Columns.Add( dt1.Columns[i].ColumnName );
     }
     for(j=0; j<dt2.Columns.Count; j++){
      if( dt1.Columns[j].ColumnName == KeyColName ){
       colKey2=j;
       continue;
      }
      dtReturn.Columns.Add( dt2.Columns[j].ColumnName );
     }
     //建立表的空间
     for(i=0; i<dt1.Rows.Count; i++){
      DataRow dr;
      dr = dtReturn.NewRow();
      dtReturn.Rows.Add(dr);
     }
     //将表dt1,dt2的数据写入dtReturn
     for(i=0; i<dt1.Rows.Count; i++){
      int m=-1;
      //表dt1的第i行数据拷贝到dtReturn中去
      for(j=0; j<dt1.Columns.Count; j++){
       dtReturn.Rows[i][j] = dt1.Rows[i][j].ToString();
      }
      //查找的dt2中KeyColName的数据,与dt1相同的行(即楼主两个表中ID相同的行)
      for(k=0; k<dt2.Rows.Count; k++){
       if( dt1.Rows[i][colKey1].ToString() == dt1.Rows[k][colKey2].ToString() )}
        m=k;
       }
      }
      //表dt2的第m行数据拷贝到dtReturn中去,且不要KeyColName(ID)列
      if( m!=-1 ){
       for(k=0; k<dt2.Columns.Count; k++){
        if( k==colKey2 ){
         continue;
        }
        dtReturn.Rows[i][j] = dt2.Rows[m][k].ToString();
        j++;
       }
      }
     } return dtReturn ;
    }
    调用:
    DataTable dt= MergeDataTable(SQLDT, ExcelDT, "ID");LZ自己再修改下就可以用了
      

  4.   


    只要两个DataTable列名相同即可merge到一起;修改方法4楼已经说得很清楚了。另外还可以打开Excel直接改Excel表中的列名,如果EXCEL不是频繁多次使用的话。
      

  5.   

    的确是你的两个DataTable字段名不同  你看下 是哪个里面没有字段或字段为Column1等   比如是ExcelDT
    更改里面的字段和另一个字段一样                ExcelDT.Columns.Add("字段1", typeof(int));//后面是类型
                    ExcelDT.Columns.Add("字段2", typeof(string));
                    ExcelDT.Columns.Add("字段3", typeof(string));
      

  6.   

    哦 以上的只是添加列 你可以做再次建第三个DataTable  用上面方法添加字段后  通过循环遍历ExcelDT里面的值 到第三个DataTable中  这样第三个DataTable和SQLDT就有相同的字段了
      

  7.   

    EXCEL的列名与数据库的列名要一致。