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); } }
© Copyright 2024 Paperzz