DataGridComboboxColumn - 获取单元格值

DataGridComboboxColumn - Get cell value

任务如下:有一个带有 ComboboxColumns 的 DataGrid。如果用户更改单元格 [2,3] 并选择值!=0,则禁用单元格 [3,2]。我写了以下处理程序:

    private void grAssessment_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        int x = e.Column.DisplayIndex;
        int y = e.Row.GetIndex();           

        grAssessment.GetCell(x, y).IsEnabled = false;
        grAssessment.GetCell(x, y).Background = Brushes.LightGray;
    }

但它无论如何都会禁用适当的单元格。如何向此代码添加 selected value!=0 条件?

提前致谢。

尝试检查一下: 1. DataGridComboBoxColumn ItemsSource(仅限当前版本,使用您自己的):

private ObservableCollection<ScoreData> _scores = new ObservableCollection<ScoreData>(

    new List<ScoreData> 
    {
        new ScoreData{Score = 1, ScoreVerbal = "the same"},
        new ScoreData{Score = 3, ScoreVerbal = "moderate superiority"},
        new ScoreData{Score = 5, ScoreVerbal = "strong superiority"},
        new ScoreData{Score = 7, ScoreVerbal = "the samvery strong superioritye"},
        new ScoreData{Score = 9, ScoreVerbal = "extremely superiority"},
    } );

2。处理程序代码(在数据网格上定义的处理程序):

 private void SelectDataGrid_OnCellEditEnding(object sender, 
        DataGridCellEditEndingEventArgs e)
    {
        var editingElement = e.EditingElement as Selector;
        if(editingElement == null) return;
        var selectedData = editingElement.SelectedItem as ScoreData;
        if(selectedData == null || selectedData.Score > 1) return;
        var dataGridCell = editingElement.GetVisualParentOfType<DataGridCell>();
        if(dataGridCell == null) return;
        dataGridCell.IsEnabled = false;
    }

3。 GetVisualParentOfType 代码(作为扩展的一部分 class):

public static class VisualTreeExtensions
{
     public static T GetVisualParentOfType<T>(this DependencyObject child)
        where T : DependencyObject
    {
        if (child is T) 
            return child as T;
        var parentObject = VisualTreeHelper.GetParent(child);
        if (parentObject == null) return null;
        var parent = parentObject as T;
        return parent ?? GetVisualParentOfType<T>(parentObject);
    }

    public static T GetChildOfType<T>(this DependencyObject depObj)
    where T : DependencyObject
    {
        if (depObj == null) return null;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null) return result;
        }
        return null;
    }
}

问候,

我找到了以下解决方案

private void grAssessment_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    int x = e.Column.DisplayIndex;
    int y = e.Row.GetIndex();
    DataGridCell cell = grAssessment.GetCell(y, x);
    if (((System.Windows.Controls.ComboBox)(cell.Content)).Text != "")
    {
        grAssessment.GetCell(x, y).IsEnabled = false;
        grAssessment.GetCell(x, y).Background = Brushes.LightGray; 
    }
    else
    {
        grAssessment.GetCell(x, y).IsEnabled = true;
        grAssessment.GetCell(x, y).Background = Brushes.White; 
    }               
}