2008-10-10 4 views
2

У меня есть DataGridView, связанный с DataView. Сетка может быть отсортирована пользователем в любом столбце.Как установить выбранную строку DataGridView для вновь добавленной строки, когда сетка привязана к сортировке DataView?

Я добавляю строку в сетку, вызывая NewRow на основе DataView, лежащей в основе DataTable, а затем добавляя его в коллекцию строк DataTable. Как я могу выбрать новую добавленную строку в сетке?

Я пытался сделать это путем создания BindingManagerBase объекта, связанного с BindingContext в DataView, то установка BindingManagerBase.Position = BindingManagerBase.Count. Это работает, если сетка не сортируется, так как новая строка добавляется в нижнюю часть сетки. Однако, если порядок сортировки таков, что строка не добавляется в нижнюю часть, это не работает.

Как я могу надежно установить выбранную строку сетки в новую строку?

+0

У меня, как та же проблема http://stackoverflow.com/questions/1664537/select-newly-added-row-datagridview-and-bindingsource – 2009-11-03 01:48:55

ответ

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 

Надеется, что это помогает!

+0

Я не используя ASP.NET GridView, Я использую Windows DataGridView. – 2008-10-23 19:43:48

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

Не самое элегантное решение, может быть, но это работает для меня

+0

не работает, сортировка происходит до того, как вы получите rowIndex. Это будет последняя позиция в представлении для строк, добавленных с помощью Add или AddNew AFAIK. – 2009-11-03 01:51:02

1

Dont узнать идентификатор его лучшее решение, но, например, выглядит лучше, чем итерация.

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

 Смежные вопросы

  • Нет связанных вопросов^_^