第一个DataTable,数据如下:编号  姓名
1     王XX第二个DataTable,数据如下:编号  年龄
1     20——————————————
我想通过合并组成一个新的DataTable,效果如下:编号  姓名  年龄
1     王XX  20——————————————请问该如何实现?

解决方案 »

  1.   

    可以试试新建一个DataTable,用SQL语句: insert 来实现,条件是编号相等
      

  2.   

    新建一个Table,然后把两个table的值合并存入。
      

  3.   

    union,自己去查一查这个的用法
      

  4.   


    如果两个表结构一样的话,可以用DataSet.Merge来做,
    不过楼主的,最直接的不考虑技术含量的就是循环了 ...
      

  5.   

    这个东西我觉得可以在数据库层解决我给个sql server存储过程的示例吧set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GOCREATE PROCEDURE [dbo].[存储过程名]
    @data1 varchar(50)

    As
    BEGIN
    SET NOCOUNT ON
      
    SELECT [table1].attribute1, [table2]attribute2
    FROM [table1] inner join [table2] 
    ON [table1].attribute3=[table2].attribute3
    WHERE  查询条件
    END
      

  6.   

    sql: 
    select tb1.编号, tb1.姓名, tb2.年龄 from tb1, tb2
    where tb1.编号=tb2.编号C#:
    dt1.Columns.Add("年龄");
    DataRow[] rows;
    foreach(DataRow row in dt1.Rows){
    rows = dt2.Select("编号="+row["编号"]);
    if(rows.Length>0)row["年龄"] = rows[0]["年龄"];
    }
      

  7.   

    dt1.Columns.Add("年龄");
    for(int i=0;i!=dt2.Rows.count;i++)
    {
    dt1.rows[i][2]=dt2.rows[i][1]
    }
      

  8.   

    新建一个DataTable,然后合并,合并条件是编号相同,还有一种就是你在查询时可以使用多表查询,然后查询出你需要的数据。
      

  9.   

    C#提供的merge函数只针对同类型的数据表;楼主这种情况需要自己定义一个函数。
    我做了一个专门针对楼主这种情况的函数MergeDataTable()楼主可以这样调用:
    Dt1 = MergeDataTable(Dt1, Dt2, "ID");下面是函数定义: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 ;
    }有别人的就不用去写了吧。自己写累,虽然这个答案不够精简,不过感觉还不错的资源来源:http://zhidao.baidu.com/question/48304907.html?fr=ala0
      

  10.   

    用存储过程撒 
    从两个表取出两个值 然后再插入第三个表
    created procedure “你自己存储过程的名字”
    /*
    好像冒得输入值
    /*
    declare @i ,@j(什么类型你自己写)
    select @i=姓名 from datatable1
    select @j=年龄 from datatable2
    insert datatable3  (姓名,年龄,) value(@i,@j)
      

  11.   

    DataTable.Merge 方法
    将指定的 DataTable 与当前的 DataTable 合并。
    http://msdn.microsoft.com/zh-cn/library/system.data.datatable.merge(VS.80).aspx
      

  12.   

    Merge方法是将两个结构相似的datatable合并成一个datatable:  
    DataTable dt1=new DataTable();  
    dt1.Columns.Add("ID",typeof(int));  
    dt1.Columns.Add("Name",typeof(string));  
    dt1.PrimaryKey=new DataColumn[] { dt1.Columns[0] };  
     
    DataTable dt2=new DataTable();  
    dt2.Columns.Add("ID",typeof(int));  
    dt2.Columns.Add("MC",typeof(string));DataTable dt3= dt1.Copy();  
    dt3.Merge(dt2);  
    DataTable curDt = dt2.Copy(); //curDt存放合并后的值  
    if(!curDt.Columns.Cotains("B")) curDt.Columns.Add("B");  for(int r = 0; r < dt2.Rows.Count; r++)  
    {  
      DataRow dr = dt2.Rows[r];  
      string aValue = dr["A"].ToString().ToUpper();  
      foreach(DataRow tDr in dt1.Rows)  
      {  
      string tValue = tDr["A"].ToString().ToUpper();  
      if(tValue == aValue)  
      {  
      curDt.Rows[r]["B"] = tDr["B"];  
      break;  
      }  
      }  
    }