error 'EditItem' is not allowed for this view when applying a filter to a WPF data grid

1

I see this error in a DataGrid when using a textbox to find a name that shows me what it finds but when clicking on the cell I want to edit that error appears. when loading the window if it works but when using a filter and load the result the rows do not have this property that I think what happens

DataGrid

<DataGrid x:Name="dataGrid" 
              ItemsSource="{Binding}" 
              Loaded="DataGrid_Loaded"
              Grid.Row="3" 
              FontSize="15" AutoGenerateColumns="False" Margin="56,26,36,26" ColumnWidth="*" CurrentCellChanged="dataGrid_CurrentCellChanged" CanUserAddRows="False" 
              >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Numero de parte" Binding="{Binding PartNumber}" IsReadOnly="True"/>
            <DataGridTextColumn Binding="{Binding id}" ClipboardContentBinding="{x:Null}" Header="id" IsReadOnly="True" Visibility="Hidden"/>
            <DataGridTextColumn Header="Area" Binding="{Binding Area}" IsReadOnly="True"/>
            <DataGridTextColumn Header="Familia" Binding="{Binding Reference}" IsReadOnly="True"/>
            <DataGridTextColumn Header="Descripcion" Binding="{Binding Description}"/>
            <DataGridTextColumn Header="Minimo" Binding="{Binding Minimo}"/>
            <DataGridTextColumn Header="Critico" Binding="{Binding Critico}"/>
            <DataGridCheckBoxColumn Binding="{Binding Activo}" ClipboardContentBinding="{x:Null}" Header="Activo"/>
        </DataGrid.Columns>
    </DataGrid>

DataGrid events

private void DataGrid_Loaded(object sender, RoutedEventArgs e)
    {
        SMDWarehouseEntities db = new SMDWarehouseEntities();
        var de = (DataGrid)sender;
        de.ItemsSource = db.ConfigInventories.AsNoTracking().ToList();

    }

    private void dataGrid_CurrentCellChanged(object sender, EventArgs e)
    {
        if (dataGrid.SelectedIndex < 0) return;
        using (SMDWarehouseEntities db = new SMDWarehouseEntities())
        {
            var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(dataGrid.SelectedIndex);
            var DataCof = (ConfigInventory)row.Item;
            db.Entry(DataCof).State = System.Data.Entity.EntityState.Modified;
            db.SaveChanges();
        }
    }

the texbox event that searches and updates the data

private void tb_Buscar_TextChanged(object sender, TextChangedEventArgs e)
    {
        SMDWarehouseEntities db = new SMDWarehouseEntities();
        string Word = tb_Buscar.Text;
        var data = db.ConfigInventories.AsNoTracking().ToList();
        dataGrid.ItemsSource = (Word == "" || Word == null)? data : data.Where(x => x.PartNumber.Equals(Word));
    }
    
asked by Luis Acosta 28.06.2018 в 21:05
source

1 answer

2

The problem is probably that when you filter the data, you are not loading DataGrid with List<T> , but using Where what you really load is a WhereEnumerableIterator , which can not be edited.

Try adding ToList() when loading the filtered data:

data.Where(x => x.PartNumber.Equals(Word)).ToList();
    
answered by 29.06.2018 / 08:56
source