/// <summary>
/// 将两个列不同的DataTable合并成一个新的DataTable
/// </summary>
/// <param name="dt1">Table表1</param>
/// <param name="dt2">Table表2</param>
/// <param name="DTName">合并后新的表名</param>
/// <returns></returns>
private DataTable UniteDataTable( DataTable dt1 ,DataTable dt2 ,string DTName)
{
DataTable dt3 = dt1.Clone();
for( int i = 0 ;i < dt2.Columns.Count ;i ++ )
{
dt3.Columns.Add( dt2.Columns[i].ColumnName ) ;
}
object[] obj = new object[dt3.Columns.Count];
for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj,0);
dt3.Rows.Add(obj);
}
if( dt1.Rows.Count >= dt2.Rows.Count )
{
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
else
{
DataRow dr3 ;
for( int i = 0 ;i < dt2.Rows.Count - dt1.Rows.Count ;i ++ )
{
dr3 = dt3.NewRow() ;
dt3.Rows.Add( dr3 ) ;
}
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
dt3.TableName = DTName ;
return dt3 ;
}
/// 将两个列不同的DataTable合并成一个新的DataTable
/// </summary>
/// <param name="dt1">Table表1</param>
/// <param name="dt2">Table表2</param>
/// <param name="DTName">合并后新的表名</param>
/// <returns></returns>
private DataTable UniteDataTable( DataTable dt1 ,DataTable dt2 ,string DTName)
{
DataTable dt3 = dt1.Clone();
for( int i = 0 ;i < dt2.Columns.Count ;i ++ )
{
dt3.Columns.Add( dt2.Columns[i].ColumnName ) ;
}
object[] obj = new object[dt3.Columns.Count];
for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj,0);
dt3.Rows.Add(obj);
}
if( dt1.Rows.Count >= dt2.Rows.Count )
{
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
else
{
DataRow dr3 ;
for( int i = 0 ;i < dt2.Rows.Count - dt1.Rows.Count ;i ++ )
{
dr3 = dt3.NewRow() ;
dt3.Rows.Add( dr3 ) ;
}
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
dt3.TableName = DTName ;
return dt3 ;
}
解决方案 »
- 求在哪里打开工具箱里没有的控件
- 问一下想获取验证码的图片怎么获取?
- 点击TreeViw后显示对应数据
- 这个Listview该写在那个事件里面?
- 一个比较笨的问题,基础篇
- md5的加密.到底是缺少哪个namespace.好不容易找了一个简单的加密算法.怎么不行呢???
- 如何获取可用的盘符?
- .NET 3.0 Windows Workflow Foundation研究群
- 高手帮帮我的忙啊!请问.Net Remoting 与 套节字 的区别在那里啊?????急!!!!!!!!!!
- C# 工程注册 BHO 类型的 dll 注册成功,但是注册表没有相应键值,请帮忙
- C#代码运行过程中,如何写代码,将某些数据建立在一个表中,并能对表中某几列进行排序处理
- WPF中怎么显示C#连接数据库
select A.Key,A.A1,A.A2,B.B1,B.B2,B.B3 from dt1 as A
inner join dt2 as B on A.Key = B.Key
这个是什么代码??
这个就是你在数据库里查询的时候直接把它们关联起来
而不是先放到两个datatable里再自己想办法合并
这个没有性能可言,我知道这个方法。
但是我想知道有没有更加好的方法。。
更好的方法就得找数据来源了,如果是从数据库查出来的就直接一个sql查出放在dt中,或者就直接用2个dt被,为啥要合并
这个是什么代码??
这个就是你在数据库里查询的时候直接把它们关联起来
而不是先放到两个datatable里再自己想办法合并
已经在Datatable中了 2个表格的数据是2个数据库 .而且用的是3.5 .不支持linq
这个没有性能可言,我知道这个方法。
但是我想知道有没有更加好的方法。。
更好的方法就得找数据来源了,如果是从数据库查出来的就直接一个sql查出放在dt中,或者就直接用2个dt被,为啥要合并
因为最后需要把数据绑定在GridView中.
双重循环而已
耗费不了什么性能,顶多就是代码长一点
即使支持LINQ,LINQ底层还是循环,性能上可能LINQ耗内存更高,因为要实例化一大堆类出来
还有点小问题。。
inner join dt2 as B on A.Key = B.Key
这个靠谱,前提两个表至少得有个键的值一样,如果A.Key = B.Key
不匹配的话,那就full outer join 全连接吧