属性
名称 | 说明 |
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 |