If you are sorting, then you will have to find the new row in the sorted grid. If your grid displays a primary key column, you can use that key and the grid's support for Find to locate the row. If you do not have a primary key, then you could still use this method, but the located row may not be the new one. Attached is a lttle sample.
Another way you can do this that will work for any IBindingList DataSource whether or not there is a primary key, is to use the IBindingList.ListChanged event. In the sample, if you replace the button_click code and add a ListChanged handler as below, that will also position the current cell.
private void cm_ListChanged(object sender, ListChangedEventArgs e)
{
if(e.ListChangedType == ListChangedType.ItemAdded)
{
Console.WriteLine(e.NewIndex);
this.gridDataBoundGrid1.Focus();
this.gridDataBoundGrid1.CurrentCell.MoveTo(e.NewIndex+1,1);
}
private void button1_Click(object sender, System.EventArgs e)
{
CurrencyManager cm = (CurrencyManager)this.BindingContext[dt];
((IBindingList)cm.List).ListChanged += new ListChangedEventHandler(cm_ListChanged);
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
((IBindingList)cm.List).ListChanged -= new ListChangedEventHandler(cm_ListChanged);
}