Il modo in cui gestiamo questo richiede un po 'più di lavoro in anticipo, ma può essere automatizzato utilizzando macro VS o strumenti di code-gen come CodeSmith.
Tuttavia, questo approccio è estendibile a qualsiasi costrutto dell'interfaccia utente a cui la raccolta è vincolata e non deve essere reimplementata nell'interfaccia utente ogni volta che è necessario sapere se ci sono o meno modifiche.
Il concetto è di aggiornare i flag all'interno della raccolta e dell'oggetto business per determinare se l'appartenenza alla raccolta è stata modificata o se un determinato record è stato modificato all'interno della raccolta.
L'applicazione è abbastanza semplice:
aggiunge una proprietà HasChanged alla classe di oggetti di business.
Aggiungere una proprietà AnyDeleted alla raccolta. Questo verrà impostato solo se gli elementi vengono eliminati dalla raccolta.
Inizializzare questi valori su falso dopo che i record sono stati letti dal DB.
(Ora la parte semi-noiosa) Per ogni proprietà della classe, impostare la proprietà HasChanged su true se il valore effettivamente cambia. Fai attenzione ai valori nulli. Per esempio:
public bool IsSelected
{
get
{
return m_fIsSelected;
}
set
{
if (m_fIsSelected != value)
{
this.HasChanged = true;
m_fIsSelected = value;
}
}
}
modificare l'insieme per impostare la proprietà AnyDeleted true quando un record viene eliminato:
protected override void RemoveItem(int index)
{
this.AnyDeleted = true;
base.RemoveItem(index);
}
Infine, aggiungere un metodo per la raccolta di indicare se nulla è cambiato. Questo è il metodo che si chiamerà per determinare se eventuali modifiche devono essere salvati:
public bool HasAnyChanges()
{
// Exceptions are handled by the caller
// If anything was deleted, return true
if (this.AnyDeleted)
{
return true;
}
else
{
foreach (T theItem in this)
{
if (theItem.HasAnyChanges())
{
return true;
}
}
}
return false;
}
Non c'è due listviews, in realtà, uno solo. – mattsven
la tua domanda indica due versioni di listview! Quindi cosa intendi con questo? Hai di nuovo menzionato sul confronto di due! – King
Si sta vincolando un listview in una struttura di dati come xml o averlo come stringa e quindi salvarlo nelle impostazioni? È così ? @NeXXeuS Se capisco che la tua domanda sia così. Quindi, a meno che l'applicazione non abbia le impostazioni in memoria e la aggiorna continuamente, dovresti leggere le impostazioni e farlo. È tanto quanto salvarlo. Non penso che farebbe la differenza in termini di prestazioni, se è così. – King