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

时间:2008-10-10 13:45:20

标签: .net winforms data-binding datagridview dataview

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

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

我尝试通过创建绑定到BindingManagerBase的{​​{1}}的{​​{1}}对象,然后设置BindingContext来实现。如果网格未排序,则此方法有效,因为新行将添加到网格的底部。但是,如果排序顺序使得行未添加到底部,则不起作用。

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

3 个答案:

答案 0 :(得分: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;
}

也许不是最优雅的解决方案,但它对我有用

答案 1 :(得分:1)

不知道id是最好的解决方案,但例如看起来比迭代更好。

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

答案 2 :(得分: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

希望这有帮助!