欧美日韩国产网暴台湾_白拍偷拍制服丝袜_国产麻豆日韩在线观看_精品欧美在线va天堂资源站_亚洲色成人WWW永久_免费高级毛片AV_精品國產av色一區二區深夜久久_亚洲乱码中文字幕av综合_一级做A爱片特黄在线观看_少妇免费亚洲综合

Previous topicNext topic
Help > 開發(fā)指南 > SanMuGrid平臺編程 > 主要對象 > RowData >
BaseRow

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()來獲得。