Как получить правильную строку в отсортированном DataView? - PullRequest
0 голосов
/ 02 июня 2010

У меня есть DataGrid, содержащий небольшую таблицу. До сих пор у меня был обработчик двойного щелчка по этой сетке, который перебирал все строки, чтобы найти выбранную:

DataTable table = (DataTable)this.dataGrid.DataSource;
int selectedRow = -1;
for (int i=0; i<table.Rows.Count; i++)
  if (this.dataGrid.IsSelected(i))
    selectedRow = i;
    break;
  }
if ( selectedRow != -1 ) {
  DataRow row = table.Rows[selectedRow];
  // More code ...
}

Проблема: когда пользователь щелкает заголовок столбца и сортирует таблицу, table.Rows не возвращает правильные строки. Он по-прежнему содержит несортированные строки.

Как мне получить правильный столбец?

Редактировать 1: у меня есть System.Windows.Forms.DataGrid, а не DataGridView. Я не знаю разницы, потому что я не очень хорошо знаю .Net. Могу ли я просто заменить DataGrid на DataGridView?

Ответы [ 2 ]

1 голос
/ 02 июня 2010

DataGrid (Windows)

Попробуйте DataGrid.GetSelectedDataRows ниже, где MyBase - имя вашего DataGrid.

    Public Function GetSelectedDataRows() As DataRow()
        Dim oSelectedRows As New ArrayList
        Dim oDataTable As DataTable = DirectCast(MyBase.DataSource, DataTable)
        For i As Integer = 0 To oDataTable.Rows.Count - 1
            If MyBase.IsSelected(i) Then
                oSelectedRows.Add(oDataTable.DefaultView(i).Row)
            End If
        Next
        Return DirectCast(oSelectedRows.ToArray(GetType(DataRow)), DataRow())
    End Function

DataGridView

Используйте свойство SelectedRows. Возвращает коллекцию DataGridViewRow объектов. Поскольку вы знаете, что связываете DataTable, свойство DataGridViewRow.DataBoundItem будет DataRow. Проверьте приведенные выше разделы справки по объектам для примеров.

Ссылки

Выдержка

Элемент управления DataGrid сохраняется для обратная совместимость и для специальных необходимо. Почти для всех целей вы следует использовать элемент управления DataGridView. Единственная функция, которая доступна в элемент управления DataGrid, который не является доступны в элементе управления DataGridView это иерархическое отображение информация из двух связанных таблиц в единый контроль. Вы должны использовать два Элементы управления DataGridView для отображения информация из двух таблиц, которые в отношениях мастер / деталь.

1 голос
/ 02 июня 2010

Почему бы не использовать DataGridView.SelectedRows свойство? Затем используйте DataBoundItem для этих строк для доступа к основным данным. Это может быть типа DataRowView. В этом случае используйте свойство DataRowView.Row.

foreach (DataGridViewRow dgvrow in dataGrid.SelectedRows)
{
  DataRow row = null;
  if (dgvrow.DataBoundItem is DataRowView)
    row = (dgvrow.DataBoundItem as DataRowView).Row as DataRow;
  else
    row = dgvrow.DataBoundItem as DataRow;

  // ... stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...