Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Как получить индекс строки в WinForms, DevExpress

#c_sharp #winforms #devexpress


Как получить индекс или значения выбранной строки в gridControl от DevExpress в WinForms?
В стандартном datagridview делаю так =  

gridOrder.SelectedRows[i].Cells["order_number"].Value


Хочу заменить стандартный datagridview на gridControl, но встречаю много отличий,
думал они будут идентичный просто gridControl более функционален, а получается они
почти разные? Может есть документация на русском у кого-то для него?
    


Ответы

Ответ 1



Используйте метод ColumnView.GetSelectedRows для получения индексов выделенных строк: int[] rowHandles = gridView1.GetSelectedRows(); Если множественное выделение отключено(по умолчанию или с помощью опции режима выделения ColumnView.OptionsSelection.MultiSelect) используйте свойство ColumnView.FocusedRowHandle: int rowHandle = gridView1.FocusedRowHandle; Получить же сами значения ячеек или объект строки целиком можно с помощью методов ColumnView.GetRowCellValue/ColumnView.GetRow: int number = (int)gridView1.GetRowCellValue(rowHandle, "order_number"); //... Order order = (Order)gridView1.GetRow(rowHandle); Для сфокусированной строки есть "сокращенные" методы GetFocusedRow/GetFocusedRowCellValue p.s. Полезные ссылки: Focus and Selection Handling Obtaining and Setting Cell Values p.p.s. Как верно заметили в комментариях, MVVM можно использовать и в WinForms, и как раз DevExpress является единственным вендором, предоставляющим поддержку MVVM на уровне WinForms контролов из коробки. Для случая с выделенной строкой код биндинга может выглядеть вот так: // привязка вьюмодели списка заказов к гриду var fluent = mvvmContext1.OfType(); // привязка индикатора загрузки(если во вьюмодели есть асинхронка) fluent.SetBinding(gridView1, gView => gView.LoadingPanelVisible, x => x.IsLoading); fluent.SetBinding(gridControl1, gControl => gControl.DataSource, x => x.Entities); // привязка выделенной строки fluent.WithEvent(gridView1, "FocusedRowObjectChanged") .SetBinding(x => x.SelectedEntity, args => args.Row as Order, (gView, entity) => gView.FocusedRowHandle = gView.FindRow(entity));

Комментариев нет:

Отправить комментарий