WPF数据表格“此视图不允许EditItem”异常。

7

我以编程方式添加 DataGrid

System.Windows.Controls.DataGrid dataGrid = new System.Windows.Controls.DataGrid();
dataGrid.GridLinesVisibility = DataGridGridLinesVisibility.None;
dataGrid.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
dataGrid.Background = Brushes.White;
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Width = 250;
textColumn.Header = "Account";
textColumn.Binding = new Binding("Account");
dataGrid.Columns.Add(textColumn);

当我添加项目时:

Globals_Liker.list_datagrid [tabControl1.SelectedIndex] .Items.Add (Globals_Liker.list_item [tabControl1.SelectedIndex] [i]);

但如果我双击项目,就会出现错误:

此视图不允许“EditItem”。

如何避免弹出这个错误?

3个回答

14

您不应直接更新DataGrid的Items,而应将ItemsSource设置为该集合。DataGrid将从实现IEditableCollectionView接口的itemsource生成视图以允许编辑。此接口具有EditItems()函数,该函数让编辑发生。

因此,为解决此问题,请在VM / Code behind中创建ObservableCollection属性,并将DataGrid ItemsSource设置为它,如下所示

ObservableCollection<Type> MyCollection{get;set;}


Globals_Liker.list_datagrid[tabControl1.SelectedIndex].ItemsSource = MyCollection;

在构造函数中,您可以通过实例化来初始化此集合。每当您想要在DataGrid中添加项目时,只需将项目添加到可观察集合(MyCollection)中,它将显示在网格上并且可以进行编辑。


4

我在三种情况下看到了这个错误

情况1:如果双击数据网格(自定义的数据网格,其中包含处理后的数据,如分析),则会显示此错误。

简单地说,在数据网格中设置IsReadOnly="True"。

情况2:如果在编辑数据网格后出现此错误,则必须在RowEditEnding期间进行设置。

  (sender as DataGrid).CommitEdit(DataGridEditingUnit.Row);
case3:在RowEditEnding事件之后出现此错误,必须查看数据网格重新加载数据的位置,如果视图源或数据网格已在使用并且我们尝试手动覆盖数据,则可能会发生此情况。请让我知道是否有任何新的情况。

2

这对我来说有效

InitializeComponent();
datagrid.BeginningEdit += (s, ss) => ss.Cancel = true;

我尝试使用IsReadOnly="True",但它不允许我在数据网格上选中和取消选中复选框。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接