Ciclare su enum

giovedì 11 dicembre 2008 - 14.43

liveforever81 Profilo | Junior Member

Salve a tutti,

ho una tabella di una DataSet che mi serve per manipolare dei dati.
Ciò che devo fare è considerare solo un sottoinsieme delle righe di tale tabella: in particolare il discriminante è dato dal valore di solo un sottoinsieme di colonne.

Cerco di spiegarmi:
ho tale tabella con 10 righe e 25 colonne;
mi serve un sottoinsieme di tali righe sulla base dei valori di alcune (non tutte).

In primis ho creato una enum che contenesse gli stessi nomi delle colonne in modo da avere un mapping e lavorare lì coi nomi;

Come faccio a referenziare solo una parte (ad esempio 10 di esse, però in ordine sparso) delle colonne?

Usando questa tecnica:

foreach(DataRow dr in dt.Rows)
{
for (int i=0; i<dt.Columns.Count; i++)
{
// fa qualcosa
}
}

ovviamente io considero TUTTE le colonne mentre mi serve controllarne solo un suo sottoinsieme, sfruttando l'enum da me creata.

Mi potete aiutare?
Grazie

PS: spero d'esser stato chiaro!

0v3rCl0ck Profilo | Guru

>Salve a tutti,

Ciaoo

>
>ho una tabella di una DataSet che mi serve per manipolare dei
>dati.
>Ciò che devo fare è considerare solo un sottoinsieme delle righe
>di tale tabella: in particolare il discriminante è dato dal valore
>di solo un sottoinsieme di colonne.
>
>Cerco di spiegarmi:
>ho tale tabella con 10 righe e 25 colonne;
>mi serve un sottoinsieme di tali righe sulla base dei valori
>di alcune (non tutte).
>
>In primis ho creato una enum che contenesse gli stessi nomi delle
>colonne in modo da avere un mapping e lavorare lì coi nomi;
>
>Come faccio a referenziare solo una parte (ad esempio 10 di esse,
>però in ordine sparso) delle colonne?
>
>Usando questa tecnica:
>
>foreach(DataRow dr in dt.Rows)
>{
> for (int i=0; i<dt.Columns.Count; i++)
> {
> // fa qualcosa
> }
>}
>
>ovviamente io considero TUTTE le colonne mentre mi serve controllarne
>solo un suo sottoinsieme, sfruttando l'enum da me creata.
>
>Mi potete aiutare?

E' possibile "ciclare" un enum (http://msdn.microsoft.com/en-us/library/system.enum.getnames.aspx), ma se invece di creare un enum ti crei una collezione, che poi diventerà il tuo sotto insieme di colonne da considerare nel ciclo?

>Grazie


-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

liveforever81 Profilo | Junior Member

Ciao e grazie per la risposta!

La soluzione delle collezioni mi "affascina".
Dove trovo maggiori tips?

Infine: con quel foreach io comunque ciclo su tutta la enum e quindi apparentemente è simile al mio ciclo for di prima...o sbaglio?

alx_81 Profilo | Guru

>Salve a tutti,
Ciao!

>Come faccio a referenziare solo una parte (ad esempio 10 di esse,
>però in ordine sparso) delle colonne?
se vuoi escludere le colonne devi fare un if che controlla se la tua i fa match con l'enum. In quel caso puoi
o ricrearti un datatable o rimuovere le colonne dal datatable del dataset già caricato (DataTable.Columns.Remove).

>Grazie
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

0v3rCl0ck Profilo | Guru

>Ciao e grazie per la risposta!
>
>La soluzione delle collezioni mi "affascina".
>Dove trovo maggiori tips?

Qui ci sono le principali collezioni:

http://msdn.microsoft.com/en-us/library/system.collections.aspx

Poi ci sono quelle introdotte dal 2.0, molto interessanti, le collezioni generiche e specializzate:

http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx

http://msdn.microsoft.com/en-us/library/system.collections.specialized.aspx

Sicuramente troverai la collezione che fa al caso tuo, ad esempio una StringCollection:

http://msdn.microsoft.com/en-us/library/system.collections.specialized.stringcollection.aspx

Poi esistono funzioni che sicuramente ti faranno comodo, come Contains che data la stringa ti dice se esiste nella collezione:

http://msdn.microsoft.com/en-us/library/system.collections.specialized.stringcollection_members.aspx
http://msdn.microsoft.com/en-us/library/system.collections.specialized.stringcollection.contains.aspx

>
>Infine: con quel foreach io comunque ciclo su tutta la enum e
>quindi apparentemente è simile al mio ciclo for di prima...o
>sbaglio?

Con il foreach che hai messo nel post precedente, ciclavi su tutte le colonne del datatable.

-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5