屬性
名稱 | 說明 |
BaseRow |
返回當(dāng)前數(shù)據(jù)行的基礎(chǔ)DataRow對象. |
DataTableHelp | 返回當(dāng)前行所在的DatatableHelp對象. |
Index | 返回當(dāng)前行處于當(dāng)前視圖中的序列,這是為了方便取上一行數(shù)據(jù)。 |
Item (索引器) | 返回當(dāng)前行指定列的值. |
Locked | 鎖定行. |
NextRow | 返回當(dāng)前行的后一行。此屬性只適合配合SmGrid表使用。在純后臺場景下會一直返回空值。 |
PreviousRow | 返回當(dāng)前行的前一行。此屬性只適合配合SmGrid表使用。在純后臺場景下會一直返回空值。 |
HasErrors | 判斷當(dāng)前行中是否包含錯誤信息。 |
RowState | 返回當(dāng)前行的行狀態(tài). |
方法
名稱 | 說明 |
AcceptChanges | 接受此行的所有修改,使得保存的時候忽略此行。通常我們在窗體加載時對表中數(shù)據(jù)進(jìn)行一些初始化,比如我們添加一些輔助列、臨時列中有表達(dá)公式,這些數(shù)據(jù)不需要保存到數(shù)據(jù)庫后臺,僅作展示,但是修改里面的值的話,又改變了行當(dāng)前的狀態(tài)為已修改。這時我們就可以調(diào)用行的AcceptChanges方法,讓行狀態(tài)變?yōu)檎N葱薷牡臓顟B(tài)。這樣我們在執(zhí)行保存方法時,就不會感知到這行有觸發(fā)保存的需求。提高了效率。另外,DataTableHelp也有一個相同的方法,那個可以讓整個表中的所有行都接受當(dāng)前的值,而不去觸發(fā)保存的功能。主要在一些臨時表,不希望保存到數(shù)據(jù)庫后臺的場景使用。 |
RejectChanges | 撤銷自打開文件或最近一次保存以來,對該行做出的修改。我們的右鍵菜單中的“還原”命令就是使用的此方法。主要就是一個反悔撤消錯誤修改的功能。 |
ClearErrors | 清除該行所有列的錯誤信息. |
GetColumnError | 返回該行指定列的錯誤信息. |
SetError | 設(shè)置該行指定列的錯誤信息. |
Clone | 克隆行.將當(dāng)前行完全復(fù)制一份并新增到DataTableHelp中,并將復(fù)制行返回。 |
Delete | 刪除當(dāng)前行 |
Remove | 移除行.此方法只會從當(dāng)前已加載數(shù)據(jù)中移出,并不會從數(shù)據(jù)庫中刪除此行數(shù)據(jù)。 |
Save | 保存行. |
Load | 重新加載當(dāng)前行. |
Equals(RowData) | 比較兩個行是否相等. |
GetFilterByParameterCols(String) | 根據(jù)篩選列,結(jié)合當(dāng)前行的數(shù)據(jù),獲得一個用于篩選的SQL篩選條件字符串。 |
GetFilterByPrimaryKey | 根據(jù)主鍵,獲得一個能篩選出當(dāng)前行的篩選條件。 |
NextRowData | 返回后一行指定列的值。 |
PreviousRowData | 返回前一行指定列的值。 |
IsNull | 返回當(dāng)前行指定列是否為空。 |
OriginalIsNull | 當(dāng)前行的原始行是否為空.這跟dr.IsNull(dc,System.Data.DataRowVersion.Original)是同樣的效果. |
OriginalValue | 返回當(dāng)前行的最原始值.此值僅代表最后一次保存以來的值. |
SQLLoadFile | 從數(shù)據(jù)庫直接獲得二進(jìn)制文件. |
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 '先打印之前的行數(shù)據(jù) Proj.MsgDebug.Add("之前的數(shù)據(jù):{0}",String.Join("|", dr.BaseRow.ItemArray)) Proj.MsgDebug.Add("之前的行狀態(tài):{0}",dr.RowState.ToString()) '修改其中一列的數(shù)據(jù) dr("客戶")="修改值" Proj.MsgDebug.Add("修改之后的數(shù)據(jù):{0}",String.Join("|", dr.BaseRow.ItemArray)) Proj.MsgDebug.Add("修改之后的行狀態(tài):{0}",dr.RowState.ToString()) '接受修改值 dr.AcceptChanges() Proj.MsgDebug.Add("AcceptChanges之后的數(shù)據(jù):{0}",String.Join("|", dr.BaseRow.ItemArray)) Proj.MsgDebug.Add("AcceptChanges之后的行狀態(tài):{0}",dr.RowState.ToString()) '修改值 dr("產(chǎn)品")="新產(chǎn)品" Proj.MsgDebug.Add("修改之后的數(shù)據(jù):{0}",String.Join("|", dr.BaseRow.ItemArray)) Proj.MsgDebug.Add("修改之后的行狀態(tài):{0}",dr.RowState.ToString()) '還原修改 dr.RejectChanges() Proj.MsgDebug.Add("還原之后的數(shù)據(jù):{0}",String.Join("|", dr.BaseRow.ItemArray)) Proj.MsgDebug.Add("還原之后的行狀態(tài):{0}",dr.RowState.ToString()) '先保存當(dāng)前行的數(shù)據(jù),然后再從后臺數(shù)據(jù)庫中重新加載最新的值 dr.Load(True) '不保存當(dāng)前修改,直接從后臺數(shù)據(jù)庫中重新加載最新的值 dr.Load(False) '從當(dāng)前表中移除,但是并不從數(shù)據(jù)庫刪除 dr.Remove() '重新獲得一個行 dr=tbl.DataTableHelp.DataRows(2) '刪除行,但是此時還沒有真正從數(shù)據(jù)庫刪除,只有執(zhí)行了保存之后才會真正從數(shù)據(jù)庫刪除 dr.Delete() '保存 dr.Save() '表級別的保存 tbl.DataTableHelp.Save() '返回結(jié)果:之前的數(shù)據(jù):|211|211|產(chǎn)品02|客戶02|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 '返回結(jié)果:之前的行狀態(tài):Unchanged '返回結(jié)果:修改之后的數(shù)據(jù):|211|211|產(chǎn)品02|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 '返回結(jié)果:修改之后的行狀態(tài):Modified '返回結(jié)果:AcceptChanges之后的數(shù)據(jù):|211|211|產(chǎn)品02|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 '返回結(jié)果:AcceptChanges之后的行狀態(tài):Unchanged '返回結(jié)果:修改之后的數(shù)據(jù):|211|211|新產(chǎn)品|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 '返回結(jié)果:修改之后的行狀態(tài):Modified '返回結(jié)果:還原之后的數(shù)據(jù):|211|211|產(chǎn)品02|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 '返回結(jié)果:還原之后的行狀態(tài):Unchanged |
C# |
SmGrid tbl = Proj.CurrentSmGrid; if (tbl == null) return; RowData dr = tbl.CurrentRowData; if (dr == null) return; // 先打印之前的行數(shù)據(jù) Proj.MsgDebug.Add("之前的數(shù)據(jù):{0}", string.Join("|", dr.BaseRow.ItemArray)); Proj.MsgDebug.Add("之前的行狀態(tài):{0}", dr.RowState.ToString()); // 修改其中一列的數(shù)據(jù) dr["客戶"] = "修改值"; Proj.MsgDebug.Add("修改之后的數(shù)據(jù):{0}", string.Join("|", dr.BaseRow.ItemArray)); Proj.MsgDebug.Add("修改之后的行狀態(tài):{0}", dr.RowState.ToString()); // 接受修改值 dr.AcceptChanges(); Proj.MsgDebug.Add("AcceptChanges之后的數(shù)據(jù):{0}", string.Join("|", dr.BaseRow.ItemArray)); Proj.MsgDebug.Add("AcceptChanges之后的行狀態(tài):{0}", dr.RowState.ToString()); // 修改值 dr["產(chǎn)品"]="新產(chǎn)品"; Proj.MsgDebug.Add("修改之后的數(shù)據(jù):{0}", string.Join("|", dr.BaseRow.ItemArray)); Proj.MsgDebug.Add("修改之后的行狀態(tài):{0}", dr.RowState.ToString()); // 還原修改 dr.RejectChanges(); Proj.MsgDebug.Add("還原之后的數(shù)據(jù):{0}", string.Join("|", dr.BaseRow.ItemArray)); Proj.MsgDebug.Add("還原之后的行狀態(tài):{0}", dr.RowState.ToString()); // 先保存當(dāng)前行的數(shù)據(jù),然后再從后臺數(shù)據(jù)庫中重新加載最新的值 dr.Load(true); // 不保存當(dāng)前修改,直接從后臺數(shù)據(jù)庫中重新加載最新的值 dr.Load(false); // 從當(dāng)前表中移除,但是并不從數(shù)據(jù)庫刪除 dr.Remove(); // 重新獲得一個行 dr = tbl.DataTableHelp.DataRows[2]; // 刪除行,但是此時還沒有真正從數(shù)據(jù)庫刪除,只有執(zhí)行了保存之后才會真正從數(shù)據(jù)庫刪除 dr.Delete(); // 保存 dr.Save(); // 表級別的保存 tbl.DataTableHelp.Save(); //返回結(jié)果:之前的數(shù)據(jù):|211|211|產(chǎn)品02|客戶02|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 //返回結(jié)果:之前的行狀態(tài):Unchanged //返回結(jié)果:修改之后的數(shù)據(jù):|211|211|產(chǎn)品02|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 //返回結(jié)果:修改之后的行狀態(tài):Modified //返回結(jié)果:AcceptChanges之后的數(shù)據(jù):|211|211|產(chǎn)品02|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 //返回結(jié)果:AcceptChanges之后的行狀態(tài):Unchanged //返回結(jié)果:修改之后的數(shù)據(jù):|211|211|新產(chǎn)品|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 //返回結(jié)果:修改之后的行狀態(tài):Modified //返回結(jié)果:還原之后的數(shù)據(jù):|211|211|產(chǎn)品02|修改值|業(yè)務(wù)員03|29.5|468|13806|2019-03-18 0:00:00|210|2|一|93779.5 //返回結(jié)果:還原之后的行狀態(tài):Unchanged |