我有DataGridView
绑定到DataView
。用户可以在任何列上对网格进行排序。
我通过在DataView
的基础DataTable
上调用NewRow,然后将其添加到DataTable
的Rows集合中,向网格添加一行。如何在网格中选择新添加的行?
我尝试通过创建绑定到BindingManagerBase
的{{1}}的{{1}}对象,然后设置BindingContext
来实现。如果网格未排序,则此方法有效,因为新行将添加到网格的底部。但是,如果排序顺序使得行未添加到底部,则不起作用。
如何可靠地将网格的选定行设置为新行?
答案 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
希望这有帮助!