1

我有一个要求,我必须在网格上(在 devexpress gridcontrol 上)显示一些带有可编辑复选框控件的只读数据以供用户输入,但这些列应该是动态生成的。所做的任何更改网格(复选框)都将保存在后端.

为此,我参考了这篇文章:

动态数据网格http://paulstovell.com/blog/dynamic-datagrid

如果我与 Visual Studio (2010) WPF Datagrid 一起使用,代码工作正常。但是当我使用 devexpress gridcontrol 而不是 gridcontrol(checkbox 列)时,默认情况下不可编辑。为了解决这个问题,我使用了 datatemplate,但我面临着另一个问题尽管模式为“TwoWay”,但在集合后面的代码中没有更新。

任何帮助,将不胜感激。

环境:VS 2010,WPF,Devexpress control 12.1

devexpress gridcontrol 的代码片段更改如下:

(INotifyPropertyChanged 已实施)

private ObservableCollection<Record> records;

public ObservableCollection<Record> Records
        {
            get
            {
                return records;
            }
            set
            {
                records = value;
                OnPropertyChanged(() => Records);
            }

        }

构造函数部分:

records = new ObservableCollection<Record>();

Records.Add(new Record(new Property("FirstName", "Paul"), new Property("LastName", "Stovell"), new Property("IsEnabled", true)));
Records.Add(new Record(new Property("FirstName", "Tony"), new Property("LastName", "Black"), new Property("IsEnabled", false)));

   var columns = Records.First()
    .Properties
    .Select((x, i) => new { Name = x.Name, Index = i })
    .ToArray();

            foreach (var column in columns)
            {
                var x = string.Format("Properties[{0}].Value", column.Index);
                var binding = new Binding(string.Format("Properties[{0}].Value", column.Index));


                {
                    dataGrid.Columns.Add(new GridColumn()
                        {
                            Header = column.Name,

                            DisplayMemberBinding = binding,
                            AllowEditing = DefaultBoolean.True,
                           CellTemplate = (DataTemplate)Application.Current.FindResource("AttributeDisplayTemplate")
                        });
                }



<DataTemplate x:Key="AttributeDisplayTemplate">
        <CheckBox MinWidth="70"  IsEnabled="True" IsChecked="{Binding Path=Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"   />
    </DataTemplate>

Xaml 部分

  <dxg:GridControl x:Name="dataGrid"  ItemsSource="{Binding Records}" 
 AutoPopulateColumns="False" IsEnabled="True"    Width="650">

            <dxg:GridControl.View>
                <dxg:TableView BestFitArea="All" AllowBestFit="True" ShowGroupPanel="False" NavigationStyle="Cell"  
                                    >
                </dxg:TableView>
            </dxg:GridControl.View>
        </dxg:GridControl>
4

0 回答 0