Как получить ячейку DevExpress GridControl в wpf?

У меня есть приложение wpf, где я использовал DevExpress GridControl с TableView внутри. Моя проблема в том, что я хочу получить ячейку, на которую нажали. Я нашел на другом посте это решение:

private void TableView_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        TableViewHitInfo hitInfo = tableView.CalcHitInfo(e.GetPosition(MainControl));
        if (hitInfo.InRowCell)
        {
            object value = gridControl.MainView.GetRowCellValue(hitInfo.RowHandle, hitInfo.Column);
            //...
        }
    }

Но элемент управления сеткой не имеет свойства с именем MainView. Что я делаю не так? Или у тебя есть другое решение моей проблемы?

2 ответа

Правильный фрагмент кода для получения значения ячейки должен выглядеть следующим образом:

<dxg:GridControl ItemsSource="{Binding ...">
    <dxg:GridControl.View>
        <dxg:TableView AllowEditing="False" 
                       MouseLeftButtonUp="TableView_MouseLeftButtonUp"/>
    </dxg:GridControl.View>
</dxg:GridControl>


void TableView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
    TableView tableView = sender as TableView;
    TableViewHitInfo hitInfo = tableView.CalcHitInfo(e.OriginalSource as DependencyObject);
    if (hitInfo.InRowCell) {
        object value = tableView.Grid.GetCellValue(hitInfo.RowHandle, hitInfo.Column);
        // do something
    }
}

Связанная справочная статья: Получение и установка значений ячеек

MainView - это имя представления, которое GridControl использует в этом примере. Если вы переименовали или назвали свое представление иначе, вам, очевидно, также необходимо изменить код, чтобы использовать это имя:

object value = MyGridControl.MyGridView.GetRowCellValue(hitInfo.RowHandle, hitInfo.Column);

или проще, так как представление уже должно быть в области видимости:

object value = MyGridView.GetRowCellValue(hitInfo.RowHandle, hitInfo.Column);
Другие вопросы по тегам