3

我有DataGridView一个DataView. 用户可以在任何列上对网格进行排序。

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

我尝试通过创建一个BindingManagerBase绑定到 的对象BindingContextDataView然后设置BindingManagerBase.Position = BindingManagerBase.Count. 如果网格未排序,则此方法有效,因为新行被添加到网格的底部。但是,如果排序顺序是该行未添加到底部,则此方法不起作用。

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

4

3 回答 3

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;
}

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

于 2009-01-26T01:43:01.503 回答
1

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

            DataRowView drv = (DataRowView)source.AddNew();
            grupoTableAdapter.Update(drv.Row);
            grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
于 2009-11-03T02:11:43.197 回答
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

希望这可以帮助!

于 2008-10-16T19:05:52.160 回答