国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中連接兩個(gè)DataTable,相當(dāng)于Sql的InnerJoin

2024-09-07 17:05:36
字體:
供稿:網(wǎng)友

推薦:DataGrid的多行提交
盡管ASP.NET DataGrid是眾所周知非常好的表格控件,不過,提起DataGrid的編輯功能,我們卻不敢恭維了,就拿DataGrid的數(shù)據(jù)提交功能來說,的確存在很大的問題:在DataGrid中,每編輯一行就要

在下面的例子中實(shí)現(xiàn)了3個(gè)Join方法,其目的是把兩個(gè)DataTable連接起來,相當(dāng)于Sql的Inner Join方法,返回DataTable的所有列。
如果兩個(gè)DataTable中的DataColumn有重復(fù)的話,把第二個(gè)設(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)建一個(gè)新的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ù)的列,如果有在第二個(gè)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表頭不動(dòng),表身動(dòng)
上次和海東兄討論了這個(gè)問題,但是他的表頭沒有線,所以用Div形式實(shí)現(xiàn)了,實(shí)現(xiàn)功能顯示表格,代碼如下(后臺.cs文件只要綁定數(shù)據(jù)就可以了,字段和前臺綁定的一致就OK了,在此不加贅述):<

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安阳县| 南宁市| 西乌珠穆沁旗| 广安市| 眉山市| 新沂市| 聊城市| 桂平市| 海阳市| 张家口市| 天祝| 华安县| 棋牌| 江门市| 元江| 鞍山市| 宣城市| 大冶市| 麟游县| 台中市| 彭阳县| 惠州市| 无锡市| 汉源县| 乳山市| 鄂托克旗| 宜兰市| 许昌市| 佛学| 平顺县| 万盛区| 互助| 内丘县| 合江县| 体育| 玛纳斯县| 罗城| 上饶县| 灵山县| 高要市| 武城县|