今天在做练习。涉及到两个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的数据源绑定输出。可是显示这个求助怎么解决
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的数据源绑定输出。可是显示这个求助怎么解决
...
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自己再修改下就可以用了
只要两个DataTable列名相同即可merge到一起;修改方法4楼已经说得很清楚了。另外还可以打开Excel直接改Excel表中的列名,如果EXCEL不是频繁多次使用的话。
更改里面的字段和另一个字段一样 ExcelDT.Columns.Add("字段1", typeof(int));//后面是类型
ExcelDT.Columns.Add("字段2", typeof(string));
ExcelDT.Columns.Add("字段3", typeof(string));