.net 当网格绑定到已排序的DataView时,如何将DataGridView的选定行设置为新添加的行?

.net 当网格绑定到已排序的DataView时,如何将DataGridView的选定行设置为新添加的行?,.net,winforms,data-binding,datagridview,dataview,.net,Winforms,Data Binding,Datagridview,Dataview,我将DataGridView绑定到DataView。用户可以在任何列上对网格进行排序 我通过在DataView的底层DataTable上调用NewRow,然后将其添加到DataTable的Rows集合中,将一行添加到网格中。如何在网格中选择新添加的行 我尝试创建一个绑定到DataView的BindingContext的BindingManagerBase对象,然后设置BindingManagerBase.Position=BindingManagerBase.Count。如果未对网格进行排序,则

我将
DataGridView
绑定到
DataView
。用户可以在任何列上对网格进行排序

我通过在
DataView
的底层
DataTable
上调用NewRow,然后将其添加到
DataTable
的Rows集合中,将一行添加到网格中。如何在网格中选择新添加的行

我尝试创建一个绑定到
DataView
BindingContext
BindingManagerBase
对象,然后设置
BindingManagerBase.Position=BindingManagerBase.Count
。如果未对网格进行排序,则此操作有效,因为新行将添加到网格的底部。但是,如果排序顺序使行不添加到底部,则此操作不起作用


如何可靠地将网格中选定的行设置为新行?

假设您的数据源中有某种唯一标识符,您可以迭代行集合并进行比较,例如:

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

希望这有帮助

一旦更新绑定的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;
}

也许不是最优雅的解决方案,但它对我来说很有效。不知道它是最好的解决方案,但例如,它看起来比迭代更好

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

我没有使用ASP.NET GridView,我使用的是Windows DataGridView。我遇到了同样的问题,它不起作用,排序发生在您获取行索引之前。对于使用Add或AddNew AFAIK添加的行,它将永远是视图中的最后一个位置。