Как получить экземпляр DataRow из отсортированного Grid'a

Gasanov2003
Дата: 15.12.2005 20:51:36
Подскажите, please...
Есть DataGrid Grid1 в котором отображаются данные из DataTable Table1

Делаю примерно так
DataRow Row = Table1.Rows[Grid1.CurrentRowIndex];
Если Grid1 не сортирован все нормально, получаю текущий Row
А если Grid1 отсортировать щелчком по заголовку какой-либо колонки, выполнив
DataRow Row = Table1.Rows[Grid1.CurrentRowIndex];
получаю вовсе не текущий Row.

Проблема в том что Table1.Rows[Grid1.CurrentRowIndex] возвращает Row который был под индексом Grid1.CurrentRowIndex до сортировки.

Как мне получить и Grid'a текущий Row таблицы, независимо от сортировки????



Каждая сложная вещь есть совокупность простых вещей
Devider
Дата: 16.12.2005 01:53:38
CurrencyManager crm = (CurrencyManager)this.BindingContext[this.dataGrid1.DataSource, this.dataGrid1.DataMember];
DataView dv = (DataView) crm.List;
DataRow row = dv[crm.Position].Row;
Это?
SerP1983
Дата: 16.12.2005 03:47:36
Проблема в том, что есть некий DataView по умолчанию, который и реализует сортировку. Попробуй в DataSource пихать не DataTable а DataView. А строку брать из этого DataView
Sv219
Дата: 16.12.2005 06:07:25
сматри DefaultView, щас МСДНа под рукой нет и напишу на память, будет помоему так : Table1.DefaultView[Grid1.CurrentRowIndex];
Gasanov2003
Дата: 16.12.2005 15:42:00
Всем спасибо...
Проблему решил, правда не очень "красиво"....
Добавил TextBox TextBox1 на форму, который связал с первичным ключом (его имя ID) таблицы Table1.

Текущую строку получаю так:
DataRows[] Rows = Table1.Rows.Select("ID = " + TextBox1.Text.ToString());
DataRow Row = Rows[0];

Понимаю что это решение через "одно место"... Но в силу давления сроков пришлось решить первым пришедшим в голову способом.
В следующий раз обязательно постараюсь попробовать вопользоваться данными здесь советами....
CrazyPotato
Дата: 07.12.2006 07:26:50
Воистину решение через ж...! Да здравствует кривой код! :-/ Но за изобретательность +1 балл :-)

Вариант гораздо лучше: к DataGrid привязать не DataTable, а DataView, образованное от этой таблицы. Тогда порядок строк в DataView будет изменяться в соответствии с изменением порядка строк в DataGrid. А следовательно обращение MyDataView[MyDataGrid.CurrentRowIndex] имеет смысл.

На самом деле, даже, когда ты к DataGrid привязываешь DataTable, реально к гриду привязывается стандартное представление (DefaultView) данной таблицы. И ты можешь вычислить текущую запись в таблице, как MyDataTable.DefaultView[MyDataGrid.CurrentRowIndex].Row.