Флажок Devexpress gridcontrol

Здравствуйте, у меня проблема с флажком в gridcontrol (winforms dexexpress). У меня есть три столбца «Проверить», «Имя», «Описание». Пользователь может применить сортировку к столбцу, например, «Имя», а затем установить флажок («Проверить») в какой-либо строке. Я хочу получить отмеченный элемент после того, как я нажму флажок в строке. Но я получаю неправильный индекс строки (это индекс с сортировкой по умолчанию). Любые идеи, чтобы получить правильный индекс после применения сортировки? Проблема заключается в том, что после сортировки других столбцов выбираются разные флажки. Я читал об этом http://documentation.devexpress.com/#WindowsForms/CustomDocument2531, но это мне не помогает, правда не знаю как это сделать

    private void gridViewT_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
    if (e.Column.Name == "CheckColumn" && e.RowHandle > -1)
    {
        if (e.Value != null && (bool)e.Value) {
            DataRow dr = ((DataTable)gridControlT.DataSource).Rows[e.RowHandle];
            DoSomeThing(dr);
        }
    }
}

Таким образом, e.RowHandle (что означает индекс для таблицы) после сортировки по другому старому столбцу. Столбец CheckColumn, который представляет собой столбец с флажками, не сортируется по другому столбцу.


person Cospel    schedule 14.10.2013    source источник
comment
Не совсем понятно, что вы имеете в виду, когда я получаю неправильный индекс строки? Пожалуйста, опубликуйте свой код и опишите поведение, которое вы ожидали.   -  person DmitryG    schedule 14.10.2013


Ответы (1)


Вот правильный код:

//DataRow dr = ((DataTable)gridControlT.DataSource).Rows[e.RowHandle];
DataRow dr = ((GridView)sender).GetDataRow(e.RowHandle);

Дескриптор строки получает дескриптор (не индекс) строки, содержащей обрабатываемую ячейку. Маркеры строк определяют порядок, в котором строки отображаются в представлении. В этом порядке учитываются любые настройки сортировки и фильтрации, примененные к представлению.

Связанная справочная статья: Идентификация строк и карточек

person DmitryG    schedule 14.10.2013
comment
+1 Я собирался написать то же самое, ты только что это сделал :) Я полагаю, иногда GetDataRow возвращает DataRowView, не так ли? - person Sriram Sakthivel; 14.10.2013
comment
@SriramSakthivel Я считаю, что это верно для метода ColumnView.GetRow и ложно для метода ColumnView.GetDataRow. Из документации: если источником данных является System.Data.DataTable или System.Data .DataView, этот метод возвращает объект System.Data.DataRowView. Если источником данных является настраиваемый список элементов, возвращается соответствующий элемент списка. - person DmitryG; 14.10.2013
comment
Таким образом, приведение к DataRow не удастся, необходимо проверить возвращаемое значение. - person Sriram Sakthivel; 14.10.2013
comment
@SriramSakthivel Может быть... Думаю, в каждом конкретном случае лучше спросить у ребят из службы поддержки DevExpress напрямую...по моему опыту их ответы очень быстрые и исчерпывающие - person DmitryG; 14.10.2013