Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > RowData >
BaseRow

BaseRow属性可以返回RowData对象的底层绑定的DataRow对象。我们在之前的“RowData数据转换”中已经提到过,我们之所以会提供一个RowData对象出来,主要就是为了解决DataRow对象通过索引器返回的结果为空时数据转换比较麻烦的问题。另外一个再对DataRow对象作一些功能的补充。

当然,在常规的使用场景下,我们大可直接就使用RowData对象来读取行中的数据。但是,在一些对循环比较多,性能比较注重的场合,在赋值时我们可以考虑直接通过DataRow来读取。因为RowData返回的结果是经过处理的。一些空值会被转化成其他值。这种处理一是会影响性能,另外也会影响复制的结果。所以这时候我们就可以通过BaseRow属性来返回RowData对象进行读取数据。

Vb.Net
'向当前表中添加一些数据
Dim tbl As SmGrid=Proj.CurrentSmGrid
'通过SQL从数据库中获得数据
Dim dt As DataTableHelp=Proj.DatabaseForUserDB.ExecuteDataTableHelp("select * from tableName where ID>12")
If dt IsNot Nothing AndAlso dt.DataRows.Count>0 Then '如果数据不为空
    '遍历所有查询到的结果
    For Each dr As RowData In dt.DataRows
        '在当前表中新增一行
        Dim drNew As RowData=tbl.DataTableHelp.AddNew()
        '获得DataRow对象
        Dim drOri As DataRow=dr.BaseRow
        '遍历所有列
        For Each col As ColData In tbl.DataTableHelp.DataCols
            '如果当前表与查询到的结果中包含相同列名
            If dt.DataCols.Contains(col.Name) Then
                '直接通过DataRow对象读取结果赋值给新增的RowData对象中。
                '这时选择不直接通过dr(col.Name)读取结果,是因为RowData返回的结果是经过处理的。一些空值会被转化
                drNew(col.Name)=drOri(col.Name)
            End If
        Next
    Next
End If

C#
// 向当前表中添加一些数据
SmGrid tbl = Proj.CurrentSmGrid;
// 通过SQL从数据库中获得数据
DataTableHelp dt = Proj.DatabaseForUserDB.ExecuteDataTableHelp("select * from tableName where ID>12");
if (dt != null && dt.DataRows.Count > 0)
{
    // 遍历所有查询到的结果
    foreach (RowData dr in dt.DataRows)
    {
        // 在当前表中新增一行
        RowData drNew = tbl.DataTableHelp.AddNew();
        // 获得DataRow对象
        DataRow drOri = dr.BaseRow;
        // 遍历所有列
        foreach (ColData col in tbl.DataTableHelp.DataCols)
        {
            // 如果当前表与查询到的结果中包含相同列名
            if (dt.DataCols.Contains(col.Name))
            {
                // 直接通过DataRow对象读取结果赋值给新增的RowData对象中。
                // 这时选择不直接通过dr(col.Name)读取结果,是因为RowData返回的结果是经过处理的。一些空值会被转化
                drNew[col.Name] = drOri[col.Name];
            }
        }
    }
}

本身RowData并不是从DataRow继承,也并没有实现DataRow对象的所有功能,只是把一些数据处理相关的常用功能实现,并添加了一些其他相关功能。如果想用DataRow本身的方法处理一些数据也是可以的。因为RowData的本质就是将DataRow对象打包引用,本身的所有方法功能本身也是对此BaseRow属性返回的DataRow进行处理。

如果我们想通过DataRow对象获得对RowData对象的引用的话,可以直接通过扩展函数 GetRowData()来获得。