Inquiridor
Atualiza DataGrid Entity Framework 5

Discussão Geral
-
Boa noite amigos,
Estou com uma dúvida que está me tomando muito tempo.
Sou iniciante em WPF e estou trabalhando com EF 5.
O que preciso fazer:
Tenho um DataGrid e uma das colunas é um checkbox, ao clicar nesse checkbox vou atualizar a informação desse campo no banco. (até aqui sem novidades e está funcionando)Esse DataGrid está linkado com o source dadosViewSource.
Após gravar no banco preciso atualizar o meu datagrid, sem o registro já gravado no banco, estou fazendo da seguinte forma.
dadosViewSource = contex.dados.local.where(c=> c.campo = false);
meuDataGrid.Refresh;
Quando a instrução "meuDataGrid.Refresh" é acionado ocorre uma mensagem de erro mais ou menos assim: o Datagrid não pode ser atualizado enquanto estiver em edição.
Me ajudem por favor.
Obrigado pessoal.
Abraços
Todas as Respostas
-
Gabriel bom dia
Em nossa aplicação utilizo SILVERLIGHT mas não utilizamos EF. Não sei se esta sugestão ajudará.
Tivemos um problema parecido e resolvemos utilizando OBSERVABLE COLLECTION e NotifyPropertyChanged.
Vou tentar exemplificar:
Implemente uma classe conforme abaixo.
Veja que ela implementa INotifyPropertyChanged.public class atualizaDataGrid : INotifyPropertyChanged { public uint _id; public uint Id { get { return _id; } set { if (value != this._id) { this._id = value; this.NotifyPropertyChanged("Id"); } } } public string _nome; public string Nome { get { return _nome; } set { if (value != this._nome) { this._nome = value; this.NotifyPropertyChanged("Nome"); } } } public string _tipoDocumento; public string TipoDocumento { get { return _tipoDocumento; } set { if (value != this._tipoDocumento) { this._tipoDocumento = value; this.NotifyPropertyChanged("TipoDocumento"); } } } public string _numeroDocumento; public string NumeroDocumento { get { return _numeroDocumento; } set { if (value != this._numeroDocumento) { this._numeroDocumento = value; this.NotifyPropertyChanged("NumeroDocumento"); } } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName) { if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
Agora no construtor cria uma variável OBSERVABLE COLLECTION:
Repare que o tipo T implementa a classe acima atualizaDataGrid e .ObservableCollection<atualizaDataGrid> _atualizaDataGrid = new ObservableCollection<atualizaDataGrid>();
Agora faça sua consulta no banco e crie uma nova instância de atualizaDataGrid adicionando na OBSERVABLE COLLECTION cada registro de retorno uma instância de atualizaDataGrid do que você obteve na sua operação de banco:
if (retorno.Value) { foreach (var item in dataTableRetornoConsulta) { _atualizaDataGrid.Add(new atualizaDataGrid() { Id = item.Id, Nome = item.Nome, TipoDocumento = item.DocumentoTipo, NumeroDocumento = item.DocumentoNumero }); } }
Por fim, Limpe seu DataGrid e atribua OBSERVABLE COLLECTION a ele:
meuDataGrid.ItemsSource = null;
meuDataGrid.ItemsSource = _atualizaDataGrid;FUNCIONAMENTO:
- Você alimenta a Observable que implementa atualizaDataGrid;
- atualizaDataGrid é monitorado através de INotifyPropertyChanged, que notifica as alterações nas propriedades;
- Como você alimenta o Source do Grid com a Observable, qquer alteração que ocorrer nela será refletida no grid.
Espero ter ajudado!
Abraço
Eduardo Agostinho Analista Programador - C# Developer
- Editado EAgostinho sexta-feira, 22 de março de 2013 13:02