Как получить ячейку 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);