Modificare un oggetto "classe" che è presente in una lista e poi risal...

domenica 15 aprile 2012 - 15.44
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows XP  |  Visual Studio 2010  |  Office 2007  |  Office XP  |  Opera

JRRT Profilo | Newbie

in parole semplici, ho provato a vedere in giro ma non capisco come fare ovvero
ho una classe di oggetti chiamiamola "umano", ha le seguenti proprietà : nome, cognome, anni.
creo una lista di generic List<Umano> listaUmani e ci inserisco i vari umani che creo da un form apposito
adesso voglio creare un altro form che mi permette di cambiare una delle proprietà, dopodichè risalvo tutto nella lista che poi vado a serializzare
come faccio a cambiare la proprietà per esempio 'anni' e lasciare inalterate le altre ? è possibile o devo rimuovere l'oggetto e poi riaddarlo dopo aver modificato la proprietà che mi occorreva ?
grazie

willy_80 Profilo | Senior Member

Non sono molto sicuro di aver capito il tuo problema comunque io le classi le uso molto e di solito se creo una classe umani:

Public MyUmans() as new ClsUmani

poi per popolare ed editare i dati nella matrice di classe faccio semplicemente così:

MyUmans(3).anni=22

massimo.missaglia Profilo | Newbie

Ciao,
Vediamo se ho capito: hai una clase tipo questa:

[Serializable]
public class Umano
{
public String Nome { get; set; }
public String Cognome { get; set; }
....
}

[Serializable]
public class Umani : List<Umano>
{
}

All'interno del codice fai qualcosa per popolarla del tipo:

Umani persone=new Persone();
...
Umano persona=new Umano();
persona.Nome="Mario";
persona.Cognome="Rossi";
....
persone.Add(persona);
...

più o meno qualcosa del genere suppongo.

Se la tua classe è "salvata" da qualche parte (Session, Cache, ecc...) la "estrai" apportando le modifiche, quindi la "risalvi":

Mettiamo caso che l'hai nel ViewState ad esempio:

Umani peronse =(Umani)ViewState["MiaClasse"];

Così facendo ha la tua lista contentente "n" classi Umano.


Massimo Missaglia
-------------------------------
www.MassimoMissaglia.com

willy_80 Profilo | Senior Member

io lavoro con vb.net comunque credo che il tutto sia fattibile in c nella stessa maniera.

il procedimento che seguo è questo:

1. Aggiungo al progetto una classe es ClsLav e al suo interno dichiaro una serie di proprietà:

Public Class ClsLav Dim _A, _B As String Public Property A() As String Get Return _A End Get Set(ByVal value As String) _A = value End Set End Property Public Property B() As String Get Return _B End Get Set(ByVal value As String) _B = value End Set End Property End Class

'============================================================

2. Aggiungo al progetto un modulo es Var e al suo interno dichiaro una matrice pubblica di classi:

Module Var Public Lavori(0 To 100) As ClsLav End Module

'==============================================================

3. In un qualsiasi evento del progetto popolo, edito o consulto la matrice e il suo parametro come se lavorassi su una normalissima matrice di dati:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
'====================================================================================

Detto questo per creare una "classe di classi" creo le varie classi e ne diachiaro una ulteriore le cui property non sono variabili string o integer ecc. ma sono le classi iniziali

Spero di essere stato abbastanza chiaro e spero che ti possa servire

Poi per il salvataggio personalmente preferisco ciclare la matrice di classe e salvare i vari dati in un file di testo a modo mio es:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

JRRT Profilo | Newbie

in effetti la tua è la soluzione che ho provato anche io solo che non sapevo come rendere subito serializzate e attive le modifiche allora ho fatto in questo modo

if (!m_FAut.listaUtenti.Contains(m_Utente)) m_FAut.listaUtenti.Add(m_Utente); else { string nome = m_Utente.NomeUtente; string cognome = m_Utente.CognomeUtente; string pass = text; AccessLevel accesso = m_Utente.AccessLevel; m_FAut.listaUtenti.Remove(m_Utente); Utente utens = new Utente(nome, cognome, pass, accesso); m_FAut.listaUtenti.Add(utens); } FUtensCompilator.SerializeUtenti(m_FAut);
questo perchè i dati modificati poi mi servivano immediatamente in un'altra parte del programma

InsettoScoppiettato Profilo | Junior Member

post cancellato scusate.

Alessandro Parma
Programmazione multipla scoposta con prognosi ancora da definire
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5