C#中連接兩個DataTable,相當(dāng)于Sql的InnerJoin_.Net教程
推薦:DataGrid的多行提交盡管ASP.NET DataGrid是眾所周知非常好的表格控件,不過,提起DataGrid的編輯功能,我們卻不敢恭維了,就拿DataGrid的數(shù)據(jù)提交功能來說,的確存在很大的問題:在DataGrid中,每編輯一行就要
在下面的例子中實現(xiàn)了3個Join方法,其目的是把兩個DataTable連接起來,相當(dāng)于Sql的Inner Join方法,返回DataTable的所有列。
如果兩個DataTable中的DataColumn有重復(fù)的話,把第二個設(shè)置為ColumnName "_Second",下面是代碼,希望對大家有所幫助。
using System;
using System.Data;
namespace WindowsApplication1
{
public class SQLOps
{
public SQLOps()
{
}
public static DataTable Join (DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)
{
//創(chuàng)建一個新的DataTable
DataTable table = new DataTable("Join");
// Use a DataSet to leverage DataRelation
using(DataSet ds = new DataSet())
{
//把DataTable Copy到DataSet中
ds.Tables.AddRange(new DataTable[]{First.Copy(),Second.Copy()});
DataColumn[] parentcolumns = new DataColumn[FJC.Length];
for(int i = 0; i < parentcolumns.Length; i )
{
parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName];
}
DataColumn[] childcolumns = new DataColumn[SJC.Length];
for(int i = 0; i < childcolumns.Length; i )
{
childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName];
}
//創(chuàng)建關(guān)聯(lián)
DataRelation r = new DataRelation(string.Empty,parentcolumns,childcolumns,false);
ds.Relations.Add(r);
//為關(guān)聯(lián)表創(chuàng)建列
for(int i = 0; i < First.Columns.Count; i )
{
table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);
}
for(int i = 0; i < Second.Columns.Count; i )
{
//看看有沒有重復(fù)的列,如果有在第二個DataTable的Column的列明后加_Second
if(!table.Columns.Contains(Second.Columns[i].ColumnName))
table.Columns.Add(Second.Columns[i].ColumnName, Second.Columns[i].DataType);
else
table.Columns.Add(Second.Columns[i].ColumnName "_Second", Second.Columns[i].DataType);
}
table.BeginLoadData();
foreach(DataRow firstrow in ds.Tables[0].Rows)
{
//得到行的數(shù)據(jù)
DataRow[] childrows = firstrow.GetChildRows(r);
if(childrows != null && childrows.Length > 0)
{
object[] parentarray = firstrow.ItemArray;
foreach(DataRow secondrow in childrows)
{
object[] secondarray = secondrow.ItemArray;
object[] joinarray = new object[parentarray.Length secondarray.Length];
Array.Copy(parentarray,0,joinarray,0,parentarray.Length);
Array.Copy(secondarray,0,joinarray,parentarray.Length,secondarray.Length);
table.LoadDataRow(joinarray,true);
}
}
}
table.EndLoadData();
}
return table;
}
public static DataTable Join (DataTable First, DataTable Second, DataColumn FJC, DataColumn SJC)
{
return Join(First, Second, new DataColumn[]{FJC}, new DataColumn[]{SJC});
}
public static DataTable Join (DataTable First, DataTable Second, string FJC, string SJC)
{
return Join(First, Second, new DataColumn[]{First.Columns[FJC]}, new DataColumn[]{First.Columns[SJC]});
}
}
}
分享:DataGrid表頭不動,表身動上次和海東兄討論了這個問題,但是他的表頭沒有線,所以用Div形式實現(xiàn)了,實現(xiàn)功能顯示表格,代碼如下(后臺.cs文件只要綁定數(shù)據(jù)就可以了,字段和前臺綁定的一致就OK了,在此不加贅述): <
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實例(可帶附件)
- js實現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進度條的實現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現(xiàn)分頁示例代碼
- 相關(guān)鏈接:
- 教程說明:
.Net教程-C#中連接兩個DataTable,相當(dāng)于Sql的InnerJoin。