34 messaggi dal 02 dicembre 2010
Apro un altro topic perchè il precedente non ha avuto risposta scusate.

Ho questo form con una casella combinata dove metto le attività.
public frmClienti()
{
  InitializeComponent();
  cliente= ApplicationContext.Current.Cliente;
  attività = ApplicationContext.Current.Attività;

  cboAttività.DataSource = attività.GetAll();
  cboAttività.ValueMember = "Id";
  cboAttività.DisplayMember = "Descrizione";

          

}



Sotto ad essa c'è una DataGridView e quando cambio attività riempio la datagrid


CODICE PRESUMO SBAGLIATO

protected void cboMaster_SelectedIndexChanged(object sender, System.EventArgs e)
{
// codice dove valorizzo chiave
dgwClienti.DataSource=cliente.GetAll().Where(f=> f.Attività = chiave).Select(c => new { c.Id, c.RagioneSociale });

}


a questo punto quando cambio riga della datagridview aggiorno il bindingsource a cui sono collegate le textbox

CODICE PRESUMO SBAGLIATO

 private void dgwClienti_SelectionChanged(object sender, EventArgs e)
{
  int id = Convert.ToInt32(dgwClienti.Rows[dgwClienti.CurrentCell.RowIndex].Cells[0].Value);
try
{
this.currentObjectSetBindingSource.DataSource = cliente.GetById(id);
                
}
catch
{
}

}


Diciamo che fino a qua funzionicchierebbe

Il problema è che se io lancio il programma, poi ne apro un altro/modifico qualcosa via sql management studio, il programma non si accorge delle modifiche!!!

Mettiamo il caso che abbia 2 clienti
Cliente1 via da qua
Cliente2 piazza di la

apro il programma, me li visualizza correttamente, poi da sqlmanagement modifico l'indirizzo di Cliente2 in "piazza da qua", torno sul programma e non si vede la modifica (giustamente perchè non è stato fatto refresh nè nulla). A questo punto modifico il cliente1 e mi aspetterei che il Context salvi la modifica di Cliente1 E recuperi la modifica di Cliente2 anche perchè dopo una modifica io associo alla datasource della datagridview cliente.GetAll().
Invece questo non accade.
Come devo fare?
Modificato da MaxDembo81 il 09 febbraio 2011 14.32 -
Come hai accennato, devi gestire una logica di refresh

Sulla singola entity puoi farlo con questo metodo
http://msdn.microsoft.com/en-us/library/bb896255.aspx

Su un'ObjectQuery (che ottieni da una query LINQ su un set) devi impostare l'opportuna MergeOption, tipo come vedi qui
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/e24f349c-055f-4eb6-a3fc-c6d3e1243d2c

Ciao
Marco
34 messaggi dal 02 dicembre 2010
stavo giusto scrivendo che forse avevo capito dove era il problema!

In ModelVC l'ApplicationContext è in singleton e c'è la classe HttpRequest che lo crea e lo distrugge ad ogni richiesta.
Invece io non usando questa classe (sto facendo le prove in una winform) non distruggo/refresho mai quell'oggetto!

E' giusto quello che ho detto?
Il metodo più elegante è creare un metodo refresh nell'interfaccia IApplicationContext?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.