1. 程式人生 > >獲取DataGridView中的的選中行的DataTableRow

獲取DataGridView中的的選中行的DataTableRow

已知值: DataGridViewRow dataGridViewRow
條件:   DataGridView繫結到DataTable上
求:      它對應的DataRow
解答:   DataRow dataRow = (dataGridViewRow.DataBounditem as DataRowView).Row;
需要解釋一下: 
(1)DataGridView.CurrentRow屬性暴露DataGridView的當前行,即包含使用者單擊的單元格的行。該屬性是一個DataGridViewRow物件。
(2)以這種方式獲得的DataGridViewRow物件包含一個 DataBoundItem屬性,它暴露繫結到DataGridView的底層資料,負責當前行顯示的資料。這個屬性是object型別,因為沒有限制 DataGridView必須繫結到資料庫。然而,繫結到資料集時,該屬性實際上是一個DataGridView物件,因此可以將它強制轉換為這種型別。

(3)DataGridView類有一個Row屬性,用於訪問資料集中的資料行。該屬性的型別是DataRow,由於使用的型別化資料集定義可以知道實際的行型別,因此可以將它強制轉換為適當的型別。這裡的型別是FolkDBDataSet2.StoryRow。
(4)通過型別化資料集的行FolkDBDataSet2.StoryRow,可以使 用屬性Summary獲得Summary列的值。為保持DataGridView的靈活性,必須採用這種方式。例如,如果採用較簡單的方式,將不能把 DataGridView繫結到其他資料來源。與.NET中的所有東西一樣,如果這是個問題,可建立繼承DataGridView的類,並提供必要的功能使 這些更容易實現,但這種複雜性可能是不必要的。


DataBounditem:是控制元件顯示底層資料的一個屬性,通過訪問它可以獲取控制元件的底層資料,型別為 Object;
DataRowView:這是一個類,它的Row屬性可以獲取當前行的資料;

可知:
當我們想要獲取DataGridView中的選中行時,可以這麼幹:
  1. for ( int i = 0; i < dataGridView.SelectedRows.Count; i++)  
  2. {  
  3.         DataRow dr = (dataGridView.SelectedRows[i].DataBoundItem as DataRowView).Row;  
  4. }