(DataRowView)BindingSource

 DataRow row=Table.NewRow() 只是產生一列的記憶體還未加
到 table(畫面看不到喔 若想看得到 要使用 BindingSource)
Table.Rows.Add(row) 才加到 table 此時才有 binding 的 Position
 DataRowView dv=(DataRowView)BindingSource.AddNew() ;
state : detached
BindingSource.EndEdit() 後才加到 table 中 , state : Added
(請配合 補充的 DataRowState 專案範例學習)
BindingSource.AddNew 的示意圖
記憶體中的DataSet
Table.Count = 3
AddNew()後狀態:Detached
EndEdit()後
狀態:Added
BindingSource.Position=4
!!!注意: 此時 table.Rows[BindingSource.Position] 還不存在喔 !!
若存取此筆會產生 IndexOutofRange 例外
 DataRowView 有四種不同版本
每當在類似 DataGrid 的控制項中顯示資料時,只能顯示每一個資料
列的一個版本。顯示的資料列為 DataRowView。
DataRowView 可以有四種不同版本狀態的其中一個:Default、
Original、Current 和 Proposed。
在 DataRow 上叫用 (Invoke) BeginEdit 之後,任何已編輯的值會成
為 Proposed 值。在叫用 CancelEdit 或 EndEdit 之前,資料列會有
Original 和 Proposed 版本。如果叫用了 CancelEdit,則會捨棄建議
的版本,並將值還原成 Original。如果叫用了 EndEdit,則
DataRowView 就不再有 Proposed 版本,而建議值會成為目前的值。
預設值只在有定義預設值的資料行之資料列上才有。
下列範例使用 RowVersion 屬性以判斷在 DataRowView 中的資料
列狀態。
private static void DemonstrateRowVersion()
{
// Create a DataTable with one column.
DataTable table = new DataTable("Table");
DataColumn column = new DataColumn("Column");
table.Columns.Add(column);
// Add ten rows.
DataRow row;
for (int i = 0; i < 10; i++)
{
row = table.NewRow();
row["Column"] = "item " + i;
table.Rows.Add(row);
}
table.AcceptChanges();
// Create a DataView with the table.
DataView view = new DataView(table);
// Change one row's value:
table.Rows[1]["Column"] = "Hello";
// Add one row:
row = table.NewRow();
row["Column"] = "World";
table.Rows.Add(row);
// Set the RowStateFilter to display only added
// and modified rows.
view.RowStateFilter = DataViewRowState.Added |
DataViewRowState.ModifiedCurrent;
// Print those rows. Output includes "Hello" and "World".
PrintView(view, "ModifiedCurrent and Added");
// Set filter to display only originals of modified rows.
view.RowStateFilter =
DataViewRowState.ModifiedOriginal;
PrintView(view, "ModifiedOriginal");
// Delete three rows.
table.Rows[1].Delete();
table.Rows[2].Delete();
table.Rows[3].Delete();
// Set the RowStateFilter to display only deleted rows.
view.RowStateFilter = DataViewRowState.Deleted;
PrintView(view, "Deleted");
// Set filter to display only current rows.
view.RowStateFilter = DataViewRowState.CurrentRows;
PrintView(view, "Current");
// Set filter to display only unchanged rows.
view.RowStateFilter = DataViewRowState.Unchanged;
PrintView(view, "Unchanged");
// Set filter to display only original rows.
// Current values of unmodified rows are also returned.
view.RowStateFilter = DataViewRowState.OriginalRows;
PrintView(view, "OriginalRows");
}
private static void PrintView(DataView view, string label)
{
Console.WriteLine("\n" + label);
for (int i = 0; i < view.Count; i++)
{
Console.WriteLine(view[i]["Column"]);
Console.WriteLine("DataViewRow.RowVersion: {0}",
view[i].RowVersion);
}
}