2008-10-10 70 views
2

我有一個DataGridView綁定到DataView。網格可以由用戶在任何列上排序。如何將網格綁定到已排序的DataView時將DataGridView的選定行設置爲新添加的行?

我通過調用DataView的底層DataTable上的NewRow,然後將其添加到DataTable的Rows集合中,向網格添加一行。如何在網格中選擇新添加的行?

我試圖通過創建一個BindingManagerBase對象與DataViewBindingContext綁定,然後設置BindingManagerBase.Position = BindingManagerBase.Count。如果網格沒有排序,這將起作用,因爲新行被添加到網格的底部。但是,如果排序順序使行不會添加到底部,則這不起作用。

如何可靠地將網格的選定行設置爲新行?

+0

我有一個像 http://stackoverflow.com/questions/1664537/select-newly-added-row-datagridview-and-bindingsource – 2009-11-03 01:48:55

回答

0

假設你有某種獨特的標識符的數據源,你可以遍歷你行的收集和比較,因此:

Dim myRecentItemID As Integer = 3 

For Each row As GridViewRow In gvIndividuals.Rows 
    Dim drv As DataRowView = DirectCast(row.DataItem, DataRowView) 
    If CInt(drv("ItemID")) = myRecentItemID Then 
     gvIndividuals.EditIndex = row.RowIndex 
    End If 
Next 

希望這有助於!

+0

我不使用ASP.NET的GridView同樣的問題,我正在使用Windows DataGridView。 – 2008-10-23 19:43:48

3

只要更新綁定的DataTable,DataGridView控件就會觸發「RowsAdded」事件,DataGridViewRowsAddedEventArgs.RowIndex屬性包含添加的行的索引。

//local member 
private int addedRowIndex; 

private void AddMyRow() 
{ 
    //add the DataRow   
    MyDataSet.MyDataTable.Rows.Add(...); 

    //RowsAdded event is fired here.... 

    //select the row 
    MyDataGrid.Rows[addedRowIndex].Selected = true; 
} 

private void MyDataGrid_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    addedRowIndex = e.RowIndex; 
} 

不是最優雅的解決方案,也許,但它爲我工作

+0

它不起作用,排序發生在你得到rowIndex之前。它將永遠是視圖中添加了Add或AddNew AFAIK的行的最後一個位置。 – 2009-11-03 01:51:02

1

不知道ID,它的最佳解決方案,但例如看起來比迭代更好。

  DataRowView drv = (DataRowView)source.AddNew(); 
      grupoTableAdapter.Update(drv.Row); 
      grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]); 
相關問題