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

 

属性

名称 说明
BaseRow

返回当前数据行的基础DataRow对象.

DataTableHelp 返回当前行所在的DatatableHelp对象.
Index 返回当前行处于当前视图中的序列,这是为了方便取上一行数据。
Item (索引器)  返回当前行指定列的值.
Locked 锁定行.
NextRow 返回当前行的后一行。此属性只适合配合SmGrid表使用。在纯后台场景下会一直返回空值。
PreviousRow 返回当前行的前一行。此属性只适合配合SmGrid表使用。在纯后台场景下会一直返回空值。
HasErrors 判断当前行中是否包含错误信息。
RowState 返回当前行的行状态.

方法

名称 说明
AcceptChanges 接受此行的所有修改,使得保存的时候忽略此行。通常我们在窗体加载时对表中数据进行一些初始化,比如我们添加一些辅助列、临时列中有表达公式,这些数据不需要保存到数据库后台,仅作展示,但是修改里面的值的话,又改变了行当前的状态为已修改。这时我们就可以调用行的AcceptChanges方法,让行状态变为正常未修改的状态。这样我们在执行保存方法时,就不会感知到这行有触发保存的需求。提高了效率。另外,DataTableHelp也有一个相同的方法,那个可以让整个表中的所有行都接受当前的值,而不去触发保存的功能。主要在一些临时表,不希望保存到数据库后台的场景使用。
RejectChanges 撤销自打开文件或最近一次保存以来,对该行做出的修改。我们的右键菜单中的“还原”命令就是使用的此方法。主要就是一个反悔撤消错误修改的功能。
ClearErrors 清除该行所有列的错误信息.
GetColumnError 返回该行指定列的错误信息.
SetError 设置该行指定列的错误信息.
Clone 克隆行.将当前行完全复制一份并新增到DataTableHelp中,并将复制行返回。
Delete 删除当前行
Remove 移除行.此方法只会从当前已加载数据中移出,并不会从数据库中删除此行数据。
Save 保存行.
Load 重新加载当前行.
Equals(RowData) 比较两个行是否相等.
GetFilterByParameterCols(String) 根据筛选列,结合当前行的数据,获得一个用于筛选的SQL筛选条件字符串。
GetFilterByPrimaryKey 根据主键,获得一个能筛选出当前行的筛选条件。
NextRowData 返回后一行指定列的值。
PreviousRowData 返回前一行指定列的值。
IsNull 返回当前行指定列是否为空。
OriginalIsNull 当前行的原始行是否为空.这跟dr.IsNull(dc,System.Data.DataRowVersion.Original)是同样的效果.
OriginalValue 返回当前行的最原始值.此值仅代表最后一次保存以来的值.
SQLLoadFile 从数据库直接获得二进制文件.

Vb.Net
Dim tbl As SmGrid=Proj.CurrentSmGrid
If tbl Is Nothing Then Return
Dim dr As RowData=tbl.CurrentRowData
If dr Is Nothing Then Return

'先打印之前的行数据
Proj.MsgDebug.Add("之前的数据:{0}",String.Join("|", dr.BaseRow.ItemArray))
Proj.MsgDebug.Add("之前的行状态:{0}",dr.RowState.ToString())
'修改其中一列的数据
dr("客户")="修改值"
Proj.MsgDebug.Add("修改之后的数据:{0}",String.Join("|", dr.BaseRow.ItemArray))
Proj.MsgDebug.Add("修改之后的行状态:{0}",dr.RowState.ToString())
'接受修改值
dr.AcceptChanges()
Proj.MsgDebug.Add("AcceptChanges之后的数据:{0}",String.Join("|", dr.BaseRow.ItemArray))
Proj.MsgDebug.Add("AcceptChanges之后的行状态:{0}",dr.RowState.ToString())
'修改值
dr("产品")="新产品"
Proj.MsgDebug.Add("修改之后的数据:{0}",String.Join("|", dr.BaseRow.ItemArray))
Proj.MsgDebug.Add("修改之后的行状态:{0}",dr.RowState.ToString())
'还原修改
dr.RejectChanges()
Proj.MsgDebug.Add("还原之后的数据:{0}",String.Join("|", dr.BaseRow.ItemArray))
Proj.MsgDebug.Add("还原之后的行状态:{0}",dr.RowState.ToString())

'先保存当前行的数据,然后再从后台数据库中重新加载最新的值
dr.Load(True)
'不保存当前修改,直接从后台数据库中重新加载最新的值
dr.Load(False)

'从当前表中移除,但是并不从数据库删除
dr.Remove()
'重新获得一个行
dr=tbl.DataTableHelp.DataRows(2)
'删除行,但是此时还没有真正从数据库删除,只有执行了保存之后才会真正从数据库删除
dr.Delete()
'保存
dr.Save()

'表级别的保存
tbl.DataTableHelp.Save()

'返回结果:之前的数据:|211|211|产品02|客户02|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
'返回结果:之前的行状态:Unchanged
'返回结果:修改之后的数据:|211|211|产品02|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
'返回结果:修改之后的行状态:Modified
'返回结果:AcceptChanges之后的数据:|211|211|产品02|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
'返回结果:AcceptChanges之后的行状态:Unchanged
'返回结果:修改之后的数据:|211|211|新产品|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
'返回结果:修改之后的行状态:Modified
'返回结果:还原之后的数据:|211|211|产品02|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
'返回结果:还原之后的行状态:Unchanged

C#
SmGrid tbl = Proj.CurrentSmGrid;
if (tbl == null)
    return;
RowData dr = tbl.CurrentRowData;
if (dr == null)
    return;

// 先打印之前的行数据
Proj.MsgDebug.Add("之前的数据:{0}", string.Join("|", dr.BaseRow.ItemArray));
Proj.MsgDebug.Add("之前的行状态:{0}", dr.RowState.ToString());
// 修改其中一列的数据
dr["客户"] = "修改值";
Proj.MsgDebug.Add("修改之后的数据:{0}", string.Join("|", dr.BaseRow.ItemArray));
Proj.MsgDebug.Add("修改之后的行状态:{0}", dr.RowState.ToString());
// 接受修改值
dr.AcceptChanges();
Proj.MsgDebug.Add("AcceptChanges之后的数据:{0}", string.Join("|", dr.BaseRow.ItemArray));
Proj.MsgDebug.Add("AcceptChanges之后的行状态:{0}", dr.RowState.ToString());
// 修改值
dr["产品"]="新产品";
Proj.MsgDebug.Add("修改之后的数据:{0}", string.Join("|", dr.BaseRow.ItemArray));
Proj.MsgDebug.Add("修改之后的行状态:{0}", dr.RowState.ToString());
// 还原修改
dr.RejectChanges();
Proj.MsgDebug.Add("还原之后的数据:{0}", string.Join("|", dr.BaseRow.ItemArray));
Proj.MsgDebug.Add("还原之后的行状态:{0}", dr.RowState.ToString());

// 先保存当前行的数据,然后再从后台数据库中重新加载最新的值
dr.Load(true);
// 不保存当前修改,直接从后台数据库中重新加载最新的值
dr.Load(false);

// 从当前表中移除,但是并不从数据库删除
dr.Remove();
// 重新获得一个行
dr = tbl.DataTableHelp.DataRows[2];
// 删除行,但是此时还没有真正从数据库删除,只有执行了保存之后才会真正从数据库删除
dr.Delete();
// 保存
dr.Save();

// 表级别的保存
tbl.DataTableHelp.Save();

//返回结果:之前的数据:|211|211|产品02|客户02|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
//返回结果:之前的行状态:Unchanged
//返回结果:修改之后的数据:|211|211|产品02|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
//返回结果:修改之后的行状态:Modified
//返回结果:AcceptChanges之后的数据:|211|211|产品02|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
//返回结果:AcceptChanges之后的行状态:Unchanged
//返回结果:修改之后的数据:|211|211|新产品|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
//返回结果:修改之后的行状态:Modified
//返回结果:还原之后的数据:|211|211|产品02|修改值|业务员03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5
//返回结果:还原之后的行状态:Unchanged