我给你一个我的例子,不知道对你是否有用
我是把两个Dataset的tables[0] 合并,没有设置什么primarykey//合并meter_test表的数据集与其它表的数据集
//联接的字段jld_id 
private DataSet Unite_DataSet(DataSet m_DataSet_test,DataSet m_DataSet_other)
{
//声明结果数据集
DataSet m_DataSet = new DataSet();
int test_count = m_DataSet_test.Tables[0].Rows.Count;
int other_count = m_DataSet_other.Tables[0].Rows.Count;
//合前列数
int col_before = m_DataSet_test.Tables[0].Columns.Count;
//后续表的列数
int col_int = m_DataSet_other.Tables[0].Columns.Count;
//合并表结构,从1开始就是把后续表jil_id避开,我把它放在后续表第一个Column
for (int i =1 ; i < col_int ;i++)
{
m_DataSet_test.Tables[0].Columns.Add (new DataColumn(m_DataSet_other.Tables[0].Columns[i].ColumnName,m_DataSet_other.Tables[0].Columns[i].DataType));
}
//合并后列数
int col_after = m_DataSet_test.Tables[0].Columns.Count;

for (int i=0;i< test_count;i++)
{
for (int j=0;j < other_count; j++)
{
if(m_DataSet_test.Tables[0].Rows[i]["jld_id"].ToString() == m_DataSet_other.Tables[0].Rows[j]["jld_id"].ToString())
{
int tmp_k = 0;
for(int k = col_before; k < col_after;k++)
{
m_DataSet_test.Tables[0].Rows[i][k] = m_DataSet_other.Tables[0].Rows[j][tmp_k];
tmp_k++;
}
}
}
}
m_DataSet =m_DataSet_test;
//返回
m_DataSet;
}可能方法笨了点,但实现了~~~~,谁有更好办法??

解决方案 »

  1.   

    我的思路如下:
     现有dataset1 (as d1)、dataset2 (as d2)要合并,前提没有显示设置 PrimaryKey,避免麻烦,只要我逻辑设计上知道哪个是关联的字段。
    1、大概过程是把d2并入d1,为了方便我把d2的关联字段放在column0(如果多个关联字段依次col1、col2..);
    2、先改变d1的结构,把d2的col0(如果多个关联字段往后排)往后的column结构添到d1的columns里:
    //合并表结构,从1开始就是把后续表jil_id避开,我把它放在后续表第一个Column
    for (int i =1 ; i < col_int ;i++)
    {
    m_DataSet_test.Tables[0].Columns.Add (new DataColumn(m_DataSet_other.Tables[0].Columns[i].ColumnName,m_DataSet_other.Tables[0].Columns[i].DataType));
    }
    3、好合并后dataset结构在d1里构建好了,
    循环d1里的每一行
    嵌套循环d2,找到d2里要关联的行
    for (int i=0;i< test_count;i++)
    {
    for (int j=0;j < other_count; j++)
    {
    //if(m_DataSet_test.Tables[0].Rows[i]["jld_id"].ToString() == m_DataSet_other.Tables[0].Rows[j]["jld_id"].ToString())
    {//////}
    }
    }4、在上面的d2循环里再嵌套下面:
    循环d1的新添加的Column列,为当前d1行付当前d2行每个Column的值(当然关联字段就不用了)
    if(m_DataSet_test.Tables[0].Rows[i]["jld_id"].ToString() == m_DataSet_other.Tables[0].Rows[j]["jld_id"].ToString())
    {
    int tmp_k = 2; //标示m_DataSet_other的colunm,并且避开0列、1列的关联字段,从2开始
    for(int k = col_before; k < col_after;k++)
    {
    m_DataSet_test.Tables[0].Rows[i][k] = m_DataSet_other.Tables[0].Rows[j][tmp_k];
    tmp_k++;
    }