Saltar al contenido

La edición de DataGrid ‘EditItem’ no está permitida para esta vista cuando está vinculada a un WPF DataGrid

Esta cuestión se puede abordar de variadas formas, sin embargo te enseñamos la que en nuestra opinión es la resolución más completa.

Solución:

Intenté esto y el problema es que ha inicializado su colección Level2 como Hashset<>. IEditableCollectionView.EditItem() arroja este error al intentar actualizar el elemento en Hashset<>. Inicialicé la colección como List<> y estaba funcionando bien.

No estoy seguro de por qué no puede actualizar el elemento en hashset, necesito investigarlo más a fondo. Pero cambiando el Hashset<> a List<> corregirá este error.

Espero eso ayude

Gracias

Podrías intentar esto. Adjunte un controlador BeginningEdit a su DataGrid y apunte a este código:

    private void Grid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
    
        //// Have to do this in the unusual case where the border of the cell gets selected.
        //// and causes a crash 'EditItem is not allowed'
        e.Cancel = true;
    

Esto solo funcionará si de alguna manera logra tocar físicamente el borde de la celda. El origen original del evento es un borde, y creo que lo que puede suceder aquí es que, en lugar de que un cuadro de texto u otro elemento editable sea la fuente como se esperaba, este borde no editable aparece para su edición, lo que provoca una excepción oculta en el ‘ EditItem no está permitido’ excepción. La cancelación de este RoutedEvent antes de que pueda propagarse con su OriginalSource inválido evita que se produzca el error en seco.

Gracias a @nit que me dio el camino correcto. Por supuesto, el problema reside en la base Tipo de colecciones EF

Hashet< T > Y Datagrid necesita al menos un Lista< T >cambiando todas mis clases “aquellas generadas por Entity framework”, me da otro problema, debo hacer cambios manualmente, y tengo muchos.

Mi solución fue crear un convertidor, que me hizo el trabajo sucio:

public class listToObservableCollection : BaseConverter, IValueConverter

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    
        HashSet observableList = (HashSet)value;
        return new ObservableCollection(observableList);
    

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    
        return (HashSet)value;
    


public abstract class BaseConverter : MarkupExtension

    public override object ProvideValue(IServiceProvider serviceProvider)
    
        return this;
    

Y ponlo en el enlace de mi Datagrid2:


xmlns:l="clr-namespace:Recursos;assembly=Recursos"
...


...

ItemsSource="Binding Level2,Converter=StaticResource listoToObservable"

Lo único que está en el aire es cómo hacer un convertidor genérico, pero por ahora funciona bien.

Al final de todo puedes encontrar las críticas de otros sys admins, tú también tienes el poder insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *