Соответствие Index DataTbale и dataGridView (winforms)

в продолжении темы C# datagrid/datatable вернуться на определенную запись Где я получил ответ и все работает. Но есть нюанс если таблица в dataGridView отфильтрована

Есть Таблица которая загружена в dataGridView в таблице например 10 записей.

Но в dataGridView фильтром я показываю только 5 из них. Пример фильтра

           DataView dv;
            dv = new DataView(DS.Tables["Orders"], "Type = 2 ", "Type Desc", DataViewRowState.CurrentRows);
            dataGridView1.DataSource = dv;

Мне нужно работать с одной определенной записью. Я знаю ее индекс в таблице. Но ее индекс в dataGridView другой. Узнать даблкликом оригинальный индекс таблицы я могу так

            var r = ((DataRowView)BindingContext[dataGridView1.DataSource].Current).Row;
            var index = r.Table.Rows.IndexOf(r);
            MessageBox.Show($"{index}");

Мне нужно наоборот. Зная индекс в Таблице узнать какой он в dataGridView чтобы позиционировать на него курсор методом

dataGridView1.CurrentCell = ???

Спасибо.


Ответы (1 шт):

Автор решения: Aziz Umarov
  1. Находите нужный tableRow в таблице по индексу

  2. Находите index его в DataGridView

    DataGridViewRow row = dgv.Rows
         .Cast<DataGridViewRow>()
         .Where(r => r.Cells["ID"].Value.ToString().Equals(tableRow["ID"].ToString()))
         .First();
    
     rowIndex = row.Index;
    
→ Ссылка