После того, как пользователь отсортирует таблицу данных, как мне вернуть исходный индекс строки? - PullRequest
2 голосов
/ 10 июня 2009

скажем, я отображаю таблицу данных в представлении данных, затем пользователь сортирует его и выбирает строку ... Я хочу сделать что-то с исходным датированным в той же строке ... но индексы строк в сетевом представлении и датируемым сейчас не синхронизированы. Как мне это сделать?

Ответы [ 8 ]

3 голосов
/ 10 июня 2009

Несколько вещей приходят на ум.

  1. Вы можете запросить источник данных DataTable.

  2. Вы можете программно добавить столбец в таблицу данных, который действует как индекс исходного порядка строк DT. Если вы хотите восстановить порядок сортировки, выполните сортировку по этому столбцу. Я сделал это Вы можете установить для свойства AutoIncrement нового столбца значение true, и значения столбца будут заполнены для вас.

НТН

1 голос
/ 10 июня 2009

Предполагая, что источник данных имеет индекс, вы можете сохранить индекс в виде скрытого столбца в вашей таблице данных.

0 голосов
/ 22 сентября 2016

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

foreach (DataGridViewRow row in dataGridViewUsers.SelectedRows)
{
    //I could then access cells on each row to get the values
    string lastName = row.Cells["lastname"].Value;
    string userName = row.Cells["username"].Value;
    ...
}
0 голосов
/ 14 декабря 2015

На самом деле все довольно просто:

For Each selectedRow As DataGridViewRow In yourGridView.SelectedRows

Dim originalIndex As Integer = dataTable.Rows.IndexOf(selectedRow.DataBoundItem.Row)

next

,where dataTable is the datasource of yourGridView

Вы можете сортировать его столько раз, сколько хотите, и при этом получить исходный индекс, определенный в исходной таблице данных.

0 голосов
/ 11 июля 2014

Даже если на этот вопрос уже есть ответ, в моем случае он недостаточно хорош.

У меня возникла та же проблема, и я решил ее, как описано ниже:

Dim row As DataGridViewRow = Me.DataGridView1.SelectedRows(0)
Dim obj as MyObject = CType(CType(row.DataBoundItem, DataRowView).Row, MyObject))

' Now I can get my original index using indexOf on my datasource
Dim originalIndex = MyDataSource.IndexOf(obj)

Я могу использовать obj для поиска нужного индекса другим способом.

0 голосов
/ 09 сентября 2009

Я работал над своим задом, чтобы не использовать привязку данных в представлении данных. теперь, когда я понял это, это не проблема.

Я все еще чувствую, что в datagridview автоматически должно быть свойство sourceindex для каждого datarow, но с

  • * 1006 привязки данных *
  • слой бизнес-объектов между БД и сетью данных
  • Атрибут System.ComponentModel.Browsable (false)

Я могу сделать так, чтобы datagridviewRow содержал ссылку на весь объект целиком, без отображения в виде dataGridViewColumn

0 голосов
/ 26 июня 2009

Если я правильно понимаю ваш вопрос, вы пытаетесь сопоставить индексы строк вашего DataTable с индексами порядка сортировки вашего DataGridView. В приведенном ниже примере имя столбца сортировки - «index».

'Применить порядок сортировки к виду сетки
table.DefaultView.Sort = "index ASC"

'Назначить источник данных DataGridView для DataTable
gridview.DataSource = table.DefaultView

'Изменить значение индекса DataTable, что приведет к
DataGridView, чтобы прибегнуть к представлению. В этом случае поменяйте местами строки 0 и 1.
table.Rows (0) .Item ("index") = 1
table.Rows (1) .Item ("index") = 0

Теперь порядок строк в таблице не изменился, только gridview сортирует и отображает новый порядок строк.

Единственный способ, который я знаю, хотя это и не очень хорошее решение, заключается в следующем:

'Переназначить DataTable для его собственного отсортированного DefaultView
table = table.DefaultView.ToTable ()

'Повторно применить порядок сортировки к виду сетки
table.DefaultView.Sort = "index ASC"

'Переназначить источник данных DataGridView в DataTable
gridview.DataSource = table.DefaultView

Теперь и таблица и сетка имеют одинаковый порядок строк.

Пожалуйста, опубликуйте лучшее решение, если вы знаете его. Надеюсь, это поможет.

0 голосов
/ 10 июня 2009

Если ваша таблица имеет первичный ключ, получите его из выбранной строки, а затем используйте метод DataTable.Select () , чтобы найти эту строку в таблице данных.

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