如何合并一个DataSet中所有的DataTable,DataTable的结构完全一样; 如题谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里讲的是ado.net 2.0,不过部分你也用的上http://www.microsoft.com/china/MSDN/library/data/dataAccess/adonetdatasetenhance.mspx 做一个迭代,把你dataset里面所有的datatable都重新加在一个datatable里面 迭代的做法我已经实现,只是觉得有点麻烦,感觉.net里面应该有别的方法可以实现,DataSet的Merge方法合并了一下,只实现了DataSet的合并,没有合并DataTable 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; } 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; } 多级报表 c#打印固定区域,请前辈指点!小弟先感谢了! C# webBrowse 下拉列表自动选择问题 如何清空ds.table[0]的行 很菜的问题:如何加断点调式程序? 我自己写的游戏,求更强、更快的算法 QQ的发送按钮快捷语句是怎么做的?用什么控件吗? 如何将不同的内容导入到同一个excel中不同的书签中..... 要用存储过程把数据排列出来,该怎么做呢?我哪里错了呢? 有关程序集动态加载的问题 请教 不知道.Net中有没有什么好的网络控件
http://www.microsoft.com/china/MSDN/library/data/dataAccess/adonetdatasetenhance.mspx
的Merge方法合并了一下,只实现了DataSet的合并,没有合并DataTable
{
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;
}
{
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;
}