如题
谢谢

解决方案 »

  1.   

    这里讲的是ado.net 2.0,不过部分你也用的上
    http://www.microsoft.com/china/MSDN/library/data/dataAccess/adonetdatasetenhance.mspx
      

  2.   

    做一个迭代,把你dataset里面所有的datatable都重新加在一个datatable里面
      

  3.   

    迭代的做法我已经实现,只是觉得有点麻烦,感觉.net里面应该有别的方法可以实现,DataSet
    的Merge方法合并了一下,只实现了DataSet的合并,没有合并DataTable
      

  4.   

    public  static DataTable JionDataTales(string thisComponentID,ArrayList loDataTables,string poCriteria)
    {
    DataTable dt = new DataTable();
    if (loDataTables.Count==0)
    return dt;
    if (loDataTables.Count==1)
    return (DataTable)loDataTables[0];
    if (loDataTables.Count==2)
    return Jion2DataTables(thisComponentID,
    (DataTable)loDataTables[0],(DataTable)loDataTables[1],poCriteria);
    if (loDataTables.Count>2)
    {
    dt = Jion2DataTables(thisComponentID,
    (DataTable)loDataTables[0],(DataTable)loDataTables[1],poCriteria);
    poCriteria=poCriteria.Replace(((DataTable)loDataTables[0]).TableName,thisComponentID).Replace(((DataTable)loDataTables[1]).TableName,thisComponentID);
    for (int i=2;i<loDataTables.Count;i++)
    {
    dt =Jion2DataTables(thisComponentID,dt,(DataTable)loDataTables[i],poCriteria);
    }
    }
    dt.TableName=thisComponentID;
    return dt;
    }
      

  5.   

    private static DataTable Jion2DataTables(string NewDataTableName,DataTable FatherTable,DataTable ChildTable,string Relations)
    {
    DataTable fcTable;

    DataTable NewDT=new DataTable();
    NewDT.TableName="TempTable";

                
    //new DataTable 
    //add Columns
    string thisTableName = FatherTable.TableName.Replace("[","").Replace("]","");
    for (int i=0;i<FatherTable.Columns.Count;i++)
    {
    string thisColumnsName=FatherTable.Columns[i].ToString();
    System.Type thisType= FatherTable.Columns[i].GetType();
    DataColumn NewColumn = new DataColumn(thisTableName+"."+thisColumnsName,thisType);
    NewColumn.MaxLength = FatherTable.Columns[i].MaxLength;
    NewDT.Columns.Add(NewColumn);
    }
    thisTableName = ChildTable.TableName.Replace("[","").Replace("]","");
    for (int i=0;i<ChildTable.Columns.Count;i++)
    {
    string thisColumnsName=ChildTable.Columns[i].ToString();
    System.Type thisType= ChildTable.Columns[i].GetType();
    DataColumn NewColumn = new DataColumn(thisTableName+"."+thisColumnsName,thisType);
    NewDT.Columns.Add(NewColumn);
    }

    //add Rows
    int getColumnsCount = NewDT.Columns.Count;
    int getFatherColumnsCount = FatherTable.Columns.Count;
    if (ChildTable.Rows.Count == 0) 
    {
    for (int i=0;i<FatherTable.Rows.Count;i++) 
    {
    DataRow NewRow = NewDT.NewRow();
    for (int m=0;m<getColumnsCount;m++)
    {
    if (m < getFatherColumnsCount)
    {
    NewRow[m] = FatherTable.Rows[i][m];
    }
    }
    NewDT.Rows.Add(NewRow);
    }
    }
    else if (FatherTable.Rows.Count == 0) 
    {
    for (int k=0;k<ChildTable.Rows.Count;k++)
    {
    DataRow NewRow = NewDT.NewRow();
    for (int m=getFatherColumnsCount; m < getColumnsCount; m++)
    {
    NewRow[m] = ChildTable.Rows[k][m-getFatherColumnsCount];
    }
    NewDT.Rows.Add(NewRow);
    }
    }
    else 
    {
    for (int i=0;i<FatherTable.Rows.Count;i++)
    {
    for (int k=0;k<ChildTable.Rows.Count;k++)
    {
    DataRow NewRow = NewDT.NewRow();
    for (int m=0;m<getColumnsCount;m++)
    {
    if (m<getFatherColumnsCount)
    {
    NewRow[m] = FatherTable.Rows[i][m];
    }
    else
    {
    NewRow[m] = ChildTable.Rows[k][m-getFatherColumnsCount];
    }
    }
    NewDT.Rows.Add(NewRow);
    }
    }
    }

    //Add Relations

    Relations=Relations.Trim().Replace("[","").Replace("]","");

    DataRow[] SeclectRows=NewDT.Select(Relations);

    fcTable=NewDT.Clone();

    fcTable.TableName=NewDataTableName.Trim();

    foreach (DataRow row in SeclectRows)
    {
    fcTable.Rows.Add(row.ItemArray);
    }
    // }
    return fcTable;
    }