DataGridViewRow的DataBoundItem屬性


已知值: DataGridViewRow dataGridViewRow
條件:   DataGridView綁定到DataTable上
求:      它對應的DataRow
解答:   DataRow dataRow = (dataGridViewRow.DataBounditem as DataRowView).Row;

需要解釋一下:

(1)DataGridView.CurrentRow屬性暴露DataGridView的當前行,即包含用戶單擊的單元格的行。該屬性是一個DataGridViewRow對象。

(2)以這種方式獲得的DataGridViewRow對象包含一個 DataBoundItem屬性,它暴露綁定到DataGridView的底層數據,負責當前行顯示的數據。這個屬性是object類型,因為沒有限制 DataGridView必須綁定到數據庫。然而,綁定到數據集時,該屬性實際上是一個DataGridView對象,因此可以將它強制轉換為這種類型。

 

 

找到你要刪除的行,比如要刪除選中行的話。關鍵是DataGridViewRow的DataBoundItem屬性。通過他可以取得DataTable中的對應行。

DataRowView drv = xxxDgv.SelectedRows[0].DataBoundItem as DataRowView;

drv.Row就是你綁定到DataGridView的DataTable的一行。你可以對他進行任何操作了。

如果要從DataTable中刪除這一行,可以drv.Row.Delete();

或者drv.Row.Table.Rows.Remove(drv.Row); 這樣DataGridView中的對應行也就刪掉了。

 

 

 

一個DataRow對象剛被創建之后其狀態是Detached,是孤立的一個存在,所以建立了DataRow之后在DataRow中的單元填充了數據后還要通過DataTable.Rows.Add(DataRow)方法將此DataRow添加到DataTable,DataRow添加到DataTable后,   這個DataRow的狀態就轉變為Added。
當修改了這個DataRow后,這個DataRow狀態轉為Modified,當用DataRow.Delete()方法刪除DataRow后,DataRow狀態將轉為Deleted,不過此行還存在在DataTable中的,只是狀態改變了,這時用DataTable.Rows.Count查看行數,跟刪除前是一樣的。

只有在調用了DataTable.Remove(DataRow)方法后,此DataRow才被從DataTable移除,狀態也回復到Detached孤立狀態。但對於遠程的Remoting的數據集DataTable.Remove(DataRow)方法不能從測表中移出;只能用DataRow.Delete()方法加 AcceptChanges()方法

MSDN對DataRow.Delete 方法的解釋:如果行的 RowState 是“Added”,則該行將從表中移除。在使用 Delete 方法后,RowState 變成“Deleted”。在您調用 AcceptChanges 之前,它一直保持“已刪除”。可通過調用 RejectChanges 取消刪除行。

用Delete(),DataSet的HasChanges()=true;
用Remove(),DataSet的HasChanges()=false;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM