Controllo su due Dataset

giovedì 09 aprile 2009 - 14.30

enrico.rm Profilo | Newbie

Ciao a tutti, mi trovo da poco a dover lavorare in C# quindi ho poca dimestichezza in materia. Vi espongo il problema:
Ho due DataSet, uno in cui c'è una lista utenti, l'altro in cui c'è una lista dei gestori, entrambe già popolate.

//Dataset ereditato dalla session
DataSet dtsgestori = (DataSet) Session["dtsGestori"];

//dataset caricato tramite store procedure
DataSet dtsutenti = objUtenti.GetUtenti();

In pratica dovrei fare questo: se uno (o più utenti) è presente tra i gestori, devo eliminarlo dal DataSet.

Il DataView per la visualizzazione l'ho già creato:

DataView dv = new DataView(dts.Tables[0], ListaID, "", DataViewRowState.CurrentRows);

Ho iniziato a fare questo, ma non riesco a nidificare la seconda foreach del secondo dataset.

Mi sapeste aiutare?

foreach (DataRow mia_riga1 in dtsgestori.Tables[0].Rows)
{
foreach (DataRow mia_riga2 in dtsutenti.Tables[0].Rows)
{
???
}
}

GRAZIE!!

Jeremy Profilo | Guru

Ciao Enrico.
Per non stravolgere completamente quanto hai già in mente(e quindi utilizzare LINQ to Dataset) io farei così:

foreach (DataRow mia_riga1 in dtsutenti.Tables[0].Rows) { foreach (DataRow mia_riga2 in dtsgestori.Tables[0].Rows) { if (mia_riga1["Nome"]==mia_riga2["NomeUtente"]) } dtsutenti.tables[0].Rows.Remove(mia_riga2); o gestori che sia.... break; } } }


Facci sapere...
Ciao

paoval72 Profilo | Senior Member

Ciao. Ti propongo una soluzione, che mi sembra rapida e comunque facilmente applicabile, perchè non si può eliminare una riga da un dataset se si sta ciclando: ovviamente, il dataset risulterebbe variato e sfalsato.
Quindi:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ora il mio dataview è pronto per essere associato ad un controllo.

L'altra soluzione, più complicata, potrebbe essere la creazione di un dataset di "appoggio" dove copiare le righe che ti interessano e poi utilizzarlo come source.

Un saluto,
PV

enrico.rm Profilo | Newbie

paoval72 e Jeremy io vi ringrazio tanto perché grazie a voi ho avuto lo spunto per risolvere il problema. In effetti ho notato che nel foreach se elimino una riga dal dataset mi da errore, perciò ho lavorato sul datatable, impostando un filtro a priori (dovevo anche visualizzare soltanto gli utenti di CENTRO), in questo modo:

//recupero la lista degli utenti
DataTable dt = objUtenti.GetUtenti().Tables[0];

//Recupero la lista dei Gestori
DataTable dtgestori;
using (clsGestore objGestori = new clsGestore())
{
dtgestori = objGestori.GetGestoriSondaggio(idSondaggio).Tables[0];
}


//Nella lista utenti non devono comparire quelli già presenti
string FiltroAccount = "";
foreach (DataRow riga1 in dtgestori.Rows)
{
//l'itemarray[3] è il campo che identifica unicamente l'utente o il gestore
FiltroAccount += "'" + riga1.ItemArray[3].ToString() + "',";
}
DataView dv;
if (FiltroAccount != "")
{
FiltroAccount = "AccountNT not in (" + FiltroAccount.Substring(0, FiltroAccount.Length - 1) + ")";
dv = new DataView(dt, FiltroAccount + "and Frazionario = 'CENTRO'", "", DataViewRowState.CurrentRows);
}
else
{
dv = new DataView(dt, "Frazionario = 'CENTRO'", "", DataViewRowState.CurrentRows);
}
dgUtenti.DataSource = dv;
dgUtenti.DataBind();

GRAZIE ANCORA, Questo si che è un bel forum!
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