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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

一個DataTable賦值給另一個DataTable的常用方法

2019-11-17 01:51:35
字體:
供稿:網(wǎng)友

一個DataTable賦值給另一個DataTable的常用方法

DataView view = new DataView();view.Table= DataTableA;view.RowFilter = "itemType = 'book'";//itemType是DataTableA中的一個字段DataTableB= view.ToTable();或者:DataRow[] rows = DataTableA.Select("itemType = 'book'");DataTableB= DataTableA.Clone();foreach (DataRow row in rows){ DataTableB.ImportRow(row);}

或者

/// 執(zhí)行DataTable中的查詢返回新的DataTable/// </summary>/// <param name="dt">源數(shù)據(jù)DataTable</param>/// <param name="condition">查詢條件</param>/// <returns></returns>PRivate DataTable GetNewDataTable(DataTable dt, string condition,string sortstr){DataTable newdt = new DataTable();newdt = dt.Clone();DataRow[] dr = dt.Select(condition,sortstr);for (int i = 0; i < dr.Length; i++){newdt.ImportRow((DataRow)dr[i]);}return newdt;//返回的查詢結(jié)果

}

或者 逐列的形式

public static int TableDataExchange(DataSet ds, string tableName, DataTable sourceDT) { for(int i=0;i<sourceDT.Rows.Count;i++) { DataRow drNew = ds.Tables[tableName].NewRow(); foreach (DataColumn dc in sourceDT.Columns) { drNew[dc.ColumnName] = sourceDT.Rows[i][dc.ColumnName]; } ds.Tables[tableName].Rows.Add(drNew); } ds.Tables[tableName].AcceptChanges(); DataTable dt = ds.Tables[tableName]; return ds.Tables[tableName].Rows.Count; }

或者

DataSet 對象是支持 ADO.NET的斷開式、分布式數(shù)據(jù)方案的核心對象 ,用途非常廣泛.我們很多時候需要使用其中的數(shù)據(jù),比如取得一個DataTable的數(shù)據(jù)或者復(fù)制另一個DataTabe中的數(shù)據(jù)或者是DataRow的數(shù)據(jù),但是只有DataSet和DataTable的復(fù)制是支持深層復(fù)制的,就是說不僅能復(fù)制元素的結(jié)構(gòu),而且能復(fù)制元素的數(shù)據(jù),而DatatDataRow沒有相關(guān)的復(fù)制的方法,下面將簡單介紹下這些數(shù)據(jù)元素的復(fù)制問題。

DataTable sourceTable;DataTable objectTable;DatatDataRow sourceRow;DatatDataRow objectRow;DataRow tempRow;DataSet souceDataSet = new DataSet();

復(fù)制DataSet

DataSet object = souceDataSet.Copy();//深復(fù)制 DataSet object = souceDataSet.Clone();//淺復(fù)制,只復(fù)制架構(gòu)

復(fù)制DataTable

objectTable = sourceTable .Copy();//深復(fù)制 objectTable = sourceTable .Clone();//淺復(fù)制,只復(fù)制架構(gòu)

復(fù)制DataRow

項目開發(fā)中經(jīng)常遇到這種錯誤-“此行已屬于另一個表” 。導(dǎo)致這個錯誤的語句如下:

objectTable .Rows.Add(SourceDataRow);

分析了一下原因,因為DataRow DataTable 都是傳引用調(diào)用的。所以一個行在一個表中了,就不能再增加到另外一個表。

具體方法:

1 ImportRow方法:public void ImportRow( DataRow DataRow);

objectTable = sourceTable.clone();//必須先復(fù)制表的架構(gòu),使具有相同的的列或關(guān)系!foreach (DataRow oRow in sourceTable){

objectTable.ImportRow(oRow);//在objectTable中添加一個新行,并將sourceRow的值復(fù)制進(jìn)去,要求表的結(jié)構(gòu)一樣!

}

_____________________________________________________________________________________________________

2. 循環(huán)DataTable的每個列

DataRow aDataRow = objectTable.NewRow();

foreach(DataColumn aDataColumn in sourceTable.Columns)

{

aDataRow [aDataColumn.ColumnName] = sourceTable[i][aDataColumn.ColumnName];

}

objectTable.Rows.Add(aDataRow);

3. 自定義復(fù)制

objectTable.Columns.Add ("id");//不需要有一樣的架構(gòu),只復(fù)制自己需要的列!Object [] myArry = new Object [1]; foreach (DataRow oRow in sourceTable){

tempRow = objectTable.NewRow();//此方法必須調(diào)用! myArry[0] = oRow["id"];//如果myArry中沒有源表中的id列的話就會報錯! tempRow.ItemArray = myArry;//ItemArray屬性為Object類型數(shù)組,根據(jù)程序的需要需要可自行復(fù)制多個列的數(shù)據(jù)! objectTable.Rows.Add(tempRow); //此方法必須調(diào)用,否則DataRow中的數(shù)據(jù)將不能顯示!

}_____________________________________________________________________________________________________

4. LoadDataRow方法:public DataRow LoadDataRow(Object[] values,bool fAcceptChanges);

Object[] newRow = new Object[3]; // 設(shè)置對象數(shù)組的值 newRow[0] = "Hello"; newRow[1] = "World"; newRow[2] = "two"; DataRow myRow; ObjectTable.BeginLoadData(); // 將新行添加到表中 myRow = ObjectTable.LoadDataRow(newRow, true);//標(biāo)志要設(shè)置為true,表示添加新行 ObjectTable.EndLoadData();

該方法比較復(fù)雜,如果只是簡單的復(fù)制現(xiàn)有行的數(shù)據(jù)來添加新行的話建議不要采用,具體用法請參看sdk文擋。

或者:

< type="text/javaScrJavascript>

我們經(jīng)常需要向DataTable中添加一行數(shù)據(jù),大多數(shù)的情況下都是把一些從UI的控件和程序的變量中收集的數(shù)據(jù)添加到DataTable中。如以下的語句把供應(yīng)商代碼和名稱添加到DataTable中:

DataTable dtProvider = new DataTable(); DataRow drRow = dtProvider.NewRow(); drRow[0] = txtProviderCode.Text.Trim(); drRow[1] = txtProviderName.Text.Trim(); dtProvider.Rows.Add(drRow);

大多數(shù)的情況下這幾行語句是完全可以滿足要求的。但是如果想把另一個同樣結(jié)構(gòu)的DataTable的某一行添加到這個dtProvider中,就不能簡單的添加了。否則會提示一個錯誤“This row belongs to another table.”。這個時候我們必須定義另一個DataRow,把源DataRow的數(shù)據(jù)賦到目的DataRow中,再Add進(jìn)DataTable中就可以了。如下所示:

DataTable dtProvider = new DataTable(); DataRow drTarget = dtProvider.NewRow(); drTarget.ItemArry = drSource.ItemArry; // 注意:這里的drSource是另一個相同結(jié)構(gòu)的DataTable中的一行。 dtProvider.Rows.Add(drTarget); < type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="http://a.alimama.cn/inf.js" type=text/javascript>


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 垦利县| 桐梓县| 分宜县| 诏安县| 凌源市| 凤山市| 遂宁市| 登封市| 定远县| 林州市| 克山县| 沾化县| 普定县| 崇礼县| 贵阳市| 石柱| 冕宁县| 尚志市| 江安县| 探索| 永登县| 焦作市| 上栗县| 垫江县| 潍坊市| 剑阁县| 禹城市| 林西县| 万盛区| 阿巴嘎旗| 庆城县| 大渡口区| 嵩明县| 章丘市| 通州市| 沙坪坝区| 康乐县| 綦江县| 永兴县| 新密市| 赫章县|