2009-11-03 26 views
4

我加入一個新行綁定到一個DataGridView選擇新添加的行 - 的DataGridView和BindingSource的

source.AddNew(); 

在這之後的BindingSource,使用的BindingSource獲得新添加的行返回下一行在DataGridView中進行排序。

ROW "A" 
ROW "B" <- myBindingSource.AddNew(); 
ROW "C" 

myBindingSource.Current給出行「C」。 (它成爲在DataGridView選擇的行)

我需要這個,因爲我想更新只新添加的行

  DataRowView drv = (DataRowView)myBindingSource.Current; 
      myTableAdapter.Update(drv.Row); 

,而不是整個表。

  myTableAdapter.Update(myDataSet.myTable); 

此外,我想在插入後在DataGridView中選擇此新添加的行。

有沒有可能以某種方式?

+0

同一類問題 的http://stackoverflow.com/questions/191339/如何設置選定的行數據網格視圖到新添加的行當網格被綁定 – 2009-11-03 01:47:56

回答

1

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

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

它使DataGridView綁定選擇相應的新添加的行,即使任何列整理出來。 – 2009-11-03 02:24:30

0

你已經確定了實現這一目標的方法之一。完成它的另一種方法是完全忽視用戶界面:

foreach (DataRow r in myTable.AsEnumerable().Where(x => x.RowState == DataRowState.Added)) 
{ 
    myTableAdapter.Update(r); 
} 

當然,這要求Update所有在餐桌上,不只是添加了一個添加的行,所以如果你有一些瘋狂場景在這裏你有兩種不同的方式向表中添加新的行,這是行不通的。

+0

是的,但它會迭代並且不會在視圖中選擇新添加的行。無論如何,在某些情況下可能會有所幫助。感謝您的幫助。 – 2009-11-03 02:57:18

7

使用事件從DataGridView中這樣完成這個任務:

private void RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    this.Rows[e.RowIndex].Selected = true; 
} 

,作爲選擇,標誌着新添加的行。

0

如圖所示的設計看起來像從奧利弗·弗里德里希的答案,在使用這些控件的屬性創建功能擴展:

private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    drv.Rows[e.RowIndex].Selected = true; 
}