C# datagrid/datatable вернуться на определенную запись
Такой вопрос. Есть dataTable привязан к DataGrid Язык C# WinForm
Я кликаю на нужную запись и обрабатываю ее. Для себя запоминаю ее ID. Есть в ней допустим такое поле. Условный код
DataRowView dataRowView = (DataRowView)datagrid1.SelectedItem;
MessageBox.Show($"{dataRowView["ID"]}");
Обрабатываю запись как мне нужно. Допустим это занимает время. Я возвращаюсь в основной grid и делаю перезагрузку всей таблицы. Перечитываю таблицу с сервера.Пока я работал с одной записью. В эту таблицу кто то уже мог повносить другие записи и мне нужно их увидеть. НО!! Курсор нужно вернуть на ту запись на которой я был. Я помню ее ID Но ее INDEX естественно изменился. Я пока для себя написал код, который методом перебора ищет нужное мне значение и вычисляет Index и возвращает курсор на нужную мне запись. Условный код
var i = 0;
foreach(DataRow row in table.Rows)
{
if ( row["ID"].ToString() == "50" )
{
datagrid1.SelectedIndex = i;
datagrid1.Focus();
}
i++;
}
Я обернул его в отдельную функцию.
То что мне нужно работает.. но некрасиво.
Методом перебора это как то звучит не оптимизировано.
Как вернуть курсор на нужную мне запись по значению определенной колонки, наиболее правильным способом?
без перебора. Колонка содержит уникальное поле.
Запись выделяется всегда только одна. Выделяется вся запись. SingleRow
Спасибо.
Ответы (1 шт):
Думаю, код говорит сам за себя.
- Задаю первичный ключ для
DataTabletable - Нахожу
DataRowс этим ключом - Определяю ее индекс
- Выделяю строчку в
DataGridViewdataGridView1 с этим индексом
// Это можно сделать 1 раз после загрузки данных в DataTable
table.PrimaryKey = new DataColumn[] { table.Columns["ID"] };
// Ключ точно string? Если число, уберите здесь кавычки.
DataRow row = table.Rows.Find("50");
int i = table.Rows.IndexOf(row);
dataGridView1.Rows[i].Selected = true;
Или выделить одной страшной строкой можно
dataGridView1.Rows[table.Rows.IndexOf(table.Rows.Find("50"))].Selected = true;