Come eliminare elementi doppi da un array....

lunedì 28 novembre 2005 - 16.55

Skippo Profilo | Newbie

Salve a tutti, come risultato di una interrogazione del mio database ottengo un array con tre valori differenti ma che si ripetono molte volte, riesco facilmente (usando un gridview) a visualizzare tale elenco nella pagina, ma vorrei eliminare tutti i "doppioni", in modo da visualizzare solo i tre valori.

Esiste un oggetto "Data", vedi Gridview, DataList, DetailsView ecc... che riesce ad eliminarmi i doppioni???

Come posso fare??
Grazie.

Jumpa Profilo | Junior Member

>Salve a tutti, come risultato di una interrogazione del mio database
>ottengo un array con tre valori differenti ma che si ripetono
>molte volte, riesco facilmente (usando un gridview) a visualizzare
>tale elenco nella pagina, ma vorrei eliminare tutti i "doppioni",
>in modo da visualizzare solo i tre valori.
>
>Esiste un oggetto "Data", vedi Gridview, DataList, DetailsView
> ecc... che riesce ad eliminarmi i doppioni???
>
>Come posso fare??
>Grazie.


prova a monte... ovvero facendo una seleziona sul db usando la clausola DISTINCT

-------------------------
Follow the White Rabbit...

http://www.jumpa.org
-------------------------

Skippo Profilo | Newbie

Il problema è proprio questo, non posso modificare le query, sto lavorando con un WebService quindi sfrutto i suoi metodi per ottenere ciò che mi serve.

Più nel dettaglio, io faccio una richiesta per ottenere un elenco di oggetti "viaggio", tra i vari campi c'è la "destinazione", esistono viaggi con nomi differenti che però hanno delle destinazioni comuni, per questo, quando poi io chiedo di avere un array con solo le destinazioni, ottengo valori ripetuti.

Non c'è modo di far eliminare i "doppioni" con qualche proprietà dei Gridview o strutture dati simili???

Grazie per la risposta.

freeteo Profilo | Guru

ciao,
se lavori con array ti conviene usare il metodo "sort" dell'array e controllare 1 elemento con il successivo se non sono uguali:
public static void noDoppi(ArrayList pArr)
{
pArr.Sort();
for (int zI = 0; zI < pArr.Count - 1; zI++)
{
if ((string)pArr[zI] == (string)pArr[zI + 1])
{
pArr.RemoveAt(zI);
zI -= 1;
}
}
}


se invece hai 1a datatable puoi lavorare con questa funzione "daiDistinct" che usavo io che ti fa la distinct righe per 1 campo:

#region SelectDistinct
public static DataTable daiDistinct(DataTable pTabella, string pNomeCampo)
{
return daiDistinct(pTabella,pNomeCampo,"");
}
public static DataTable daiDistinct(DataTable pTabella, string pNomeCampo,string pFiltro)
{
DataTable zDt = new DataTable("tbl");
zDt.Columns.Add(pNomeCampo, pTabella.Columns[pNomeCampo].DataType);

object LastValue = null;
foreach (DataRow zDr in pTabella.Select(pFiltro, pNomeCampo))
{
if (LastValue == null || !(ColumnEqual(LastValue, zDr[pNomeCampo])))
{
LastValue = zDr[pNomeCampo];
zDt.Rows.Add(new object[] { LastValue });
}
}

return zDt;
}

static bool ColumnEqual(object A, object B)
{
if (A == DBNull.Value && B == DBNull.Value)
return true;
if (A == DBNull.Value || B == DBNull.Value)
return false;
return (A.Equals(B));
}

#endregion

sfruttando il metodo "select" della tabella e controllando che la cella non sia vuota o uguale all'altra, poi ti fai dare indietro 1a datatable che puoi bindare dove ti serve...
io le usavo ste funzioni, dovrebbero funzionare, prova a darci 1occhiata...

ps: se usi xml puoi appoggiarti a xpath come spiegano qui:
http://aspalliance.com/34

ciao

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo
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