У меня DataGridView привязан к DataView. Сетка может быть отсортирована пользователем по любому столбцу.
Я добавляю строку в сетку, вызывая NewRow для DataView, лежащего в основе DataTable, а затем добавляю ее в коллекцию Rows DataTable. Как я могу выбрать только что добавленную строку в сетке?
Я попытался сделать это, создав объект BindingManagerBase, привязанный к BindingContextDataView, а затем установив 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
Надеюсь это поможет!
Я не использую ASP.NET GridView, я использую Windows DataGridView.
Как только вы обновляете связанный 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;
}
Возможно, не самое элегантное решение, но оно мне подходит
это не работает, сортировка происходит до того, как вы получите индекс строки. Это всегда будет последняя позиция в представлении для строк, добавленных с помощью Add или Add New AFAIK.
Не знаю, что это лучшее решение, но, например, выглядит лучше, чем повторять.
DataRowView drv = (DataRowView)source.AddNew();
grupoTableAdapter.Update(drv.Row);
grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
У меня вроде такая же проблема stackoverflow.com/questions/1664537/…