2009-11-03 25 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; 
}