BaseRow屬性可以返回RowData對象的底層綁定的DataRow對象。我們在之前的“RowData數(shù)據(jù)轉(zhuǎn)換”中已經(jīng)提到過,我們之所以會提供一個RowData對象出來,主要就是為了解決DataRow對象通過索引器返回的結(jié)果為空時數(shù)據(jù)轉(zhuǎn)換比較麻煩的問題。另外一個再對DataRow對象作一些功能的補(bǔ)充。
當(dāng)然,在常規(guī)的使用場景下,我們大可直接就使用RowData對象來讀取行中的數(shù)據(jù)。但是,在一些對循環(huán)比較多,性能比較注重的場合,在賦值時我們可以考慮直接通過DataRow來讀取。因為RowData返回的結(jié)果是經(jīng)過處理的。一些空值會被轉(zhuǎn)化成其他值。這種處理一是會影響性能,另外也會影響復(fù)制的結(jié)果。所以這時候我們就可以通過BaseRow屬性來返回RowData對象進(jìn)行讀取數(shù)據(jù)。
Vb.Net |
'向當(dāng)前表中添加一些數(shù)據(jù) Dim tbl As SmGrid=Proj.CurrentSmGrid '通過SQL從數(shù)據(jù)庫中獲得數(shù)據(jù) Dim dt As DataTableHelp=Proj.DatabaseForUserDB.ExecuteDataTableHelp("select * from tableName where ID>12") If dt IsNot Nothing AndAlso dt.DataRows.Count>0 Then '如果數(shù)據(jù)不為空 '遍歷所有查詢到的結(jié)果 For Each dr As RowData In dt.DataRows '在當(dāng)前表中新增一行 Dim drNew As RowData=tbl.DataTableHelp.AddNew() '獲得DataRow對象 Dim drOri As DataRow=dr.BaseRow '遍歷所有列 For Each col As ColData In tbl.DataTableHelp.DataCols '如果當(dāng)前表與查詢到的結(jié)果中包含相同列名 If dt.DataCols.Contains(col.Name) Then '直接通過DataRow對象讀取結(jié)果賦值給新增的RowData對象中。 '這時選擇不直接通過dr(col.Name)讀取結(jié)果,是因為RowData返回的結(jié)果是經(jīng)過處理的。一些空值會被轉(zhuǎn)化 drNew(col.Name)=drOri(col.Name) End If Next Next End If |
C# |
// 向當(dāng)前表中添加一些數(shù)據(jù) SmGrid tbl = Proj.CurrentSmGrid; // 通過SQL從數(shù)據(jù)庫中獲得數(shù)據(jù) DataTableHelp dt = Proj.DatabaseForUserDB.ExecuteDataTableHelp("select * from tableName where ID>12"); if (dt != null && dt.DataRows.Count > 0) { // 遍歷所有查詢到的結(jié)果 foreach (RowData dr in dt.DataRows) { // 在當(dāng)前表中新增一行 RowData drNew = tbl.DataTableHelp.AddNew(); // 獲得DataRow對象 DataRow drOri = dr.BaseRow; // 遍歷所有列 foreach (ColData col in tbl.DataTableHelp.DataCols) { // 如果當(dāng)前表與查詢到的結(jié)果中包含相同列名 if (dt.DataCols.Contains(col.Name)) { // 直接通過DataRow對象讀取結(jié)果賦值給新增的RowData對象中。 // 這時選擇不直接通過dr(col.Name)讀取結(jié)果,是因為RowData返回的結(jié)果是經(jīng)過處理的。一些空值會被轉(zhuǎn)化 drNew[col.Name] = drOri[col.Name]; } } } } |
本身RowData并不是從DataRow繼承,也并沒有實現(xiàn)DataRow對象的所有功能,只是把一些數(shù)據(jù)處理相關(guān)的常用功能實現(xiàn),并添加了一些其他相關(guān)功能。如果想用DataRow本身的方法處理一些數(shù)據(jù)也是可以的。因為RowData的本質(zhì)就是將DataRow對象打包引用,本身的所有方法功能本身也是對此BaseRow屬性返回的DataRow進(jìn)行處理。
如果我們想通過DataRow對象獲得對RowData對象的引用的話,可以直接通過擴(kuò)展函數(shù) GetRowData()來獲得。