30 messaggi dal 13 giugno 2011
Salve, espongo brevemente il mio problema:
Ho una gridview mediante la quale visualizzo dei dati di un Db <<NON>> locale.
Ho aggiunto una colonna nella quale vorrei inserire una label (o immagine) che, per ogni riga, mi segnali la presenza o meno di quel dato nel Db locale.

Ho fatto numerose prove ma proprio non riesco a risolverlo, cioè non riesco a valorizzare quella label.

Qualche consiglio?
Grazie
matteoct ha scritto:
Salve, espongo brevemente il mio problema:
Ho una gridview mediante la quale visualizzo dei dati di un Db <<NON>> locale.
Ho aggiunto una colonna nella quale vorrei inserire una label (o immagine) che, per ogni riga, mi segnali la presenza o meno di quel dato nel Db locale.

Ho fatto numerose prove ma proprio non riesco a risolverlo, cioè non riesco a valorizzare quella label.

Qualche consiglio?
Grazie

Ciao.
In pratica tui hai 2 database, il primo collegato al tuo Gv, mentre il secondo ha soltanto una tabella e relativo campo che vuoi passare al Gv, giusto?

In via del tutto teorica (non ho mai fatto una cosa simile) potresti creare una classe che legge i dati da i 2 Db, per poi andare a recuperare i dati nel file .cs della tua pagina (quella che contiene la Gv) e riversarli nella Gv. Anche se secondo me la miglior cosa resta quella di avere un unico Db con piu tabelle relazionate tra loro, dove magari avere in locale una copia sincronizzata con quello online...

Creazione Siti Vicenza
Posizionamento Siti - SEO
193 messaggi dal 05 novembre 2009
Ti do' piu' soluzioni poi vedi quella che fa' al tuo caso:

Se si utilizza DataTable per recupereare i dati, unire i 2 DataTable in 1 datatable e poi associarlo al gridview

oppure:


- Recuperi attraverso una query i dati dal DB1 e li memorizzi nel DataSet1

-Recuperi attraverso una query i dati dal DB2 e li memorizzi nel DataSet2

- Utilizzi il metodo DataSet.Merge per unire i due set di dati e crei un datasetMaster

- Colleghi il datasetMaster alla griglia
272 messaggi dal 17 settembre 2006
matteoct ha scritto:
Salve, espongo brevemente il mio problema:
Ho una gridview mediante la quale visualizzo dei dati di un Db <<NON>> locale.
Ho aggiunto una colonna nella quale vorrei inserire una label (o immagine) che, per ogni riga, mi segnali la presenza o meno di quel dato nel Db locale.

Ho fatto numerose prove ma proprio non riesco a risolverlo, cioè non riesco a valorizzare quella label.

Qualche consiglio?
Grazie


Io userei linq

Ti crei una classe con tutte le proprietà della griglia

public class PRODOTTO
{
    public int ProdottoID { get; set; }
    public string Descrizione { get; set; }
    public bool Esiste { get; set; }  
}


Ti Generi una Lista di prodotti ("Prodotti" Nel Mio Caso) dal primo db

List<PRODOTTO> prod1 = new List<PRODOTTO>();


Ti Generi una seconda lista dal db locale

List<PRODOTTO> prod2 = new List<PRODOTTO>();


Le metti in left join con linq prendendo tutte le righe di prod1

var ListJoin = from p1 in prod1
join p2 in prod2
on p1.ProdottoID equals p2.ProdottoID into joinprodotti
from p2 in joinprodotti.DefaultIfEmpty()
select new PRODOTTO                     
{
ProdottoID = p1.ProdottoID,
Descrizione = p1.Descrizione,
Esiste = p2 != null ? true : false
};


poi fai il bind sulla griglia

GridView.datasource = ListJoin;
GridView.databind();


Spero di aver capito

Buon Lavoro
30 messaggi dal 13 giugno 2011
Intanto grazie a tutti per gli ottimi consigli.
In merito a quanto ha suggerito Giovinda, è proprio quello che sto cercando di fare, ma i risultati della tabella 1 non sono allineati con la seconda datatable!

Faccio un breve esempio della mia situazione:
Ho diverse sedi di un'azienda. Dalla sede centrale, tramite la mia applicazione e con una dropdownlist, seleziono l'azienda dalla quale visualizzare i dati, dopodichè popolo la gridview. Fin quì nulla di particolare.

La query va ad elencare i prodotti disponibili nell'azienda selezionata ed io, per ogni riga del gridview, devo sapere se quel prodotto è presente in magazzino o meno (quest'ultimo dato disponibile su Db esterno).

Quindi, riassumendo:
- Seleziono tutti i prodotti dell'azienda X
-per ogni prodotto, calcolo la disponibilità nel magazzino (dato disponibile su Db della sede centrale)
-Popolare il gridview con i dati del prodotto e della disponibilità in magazzino.

Io faccio questo ed ottengo i dati giusti, ma non sono allineati nel gridview, nel senso che vengono scritte prima le righe della datatable1, quindi dei prodotti, poi quelle della disponibilità in magazzino, quindi della 2° datatable:

-dichiaro le due datatable
-scrivo la query (seleziona tutti i prodotti di quell'azienda)
-apro la connessione con SqlCommand
-creo un datareader
-poi con un ciclo:
while reader.read
....
qui con un'altra query mi calcolo il totale del singolo prodotto

-creo un nuovo SqlDataAdapter e utilizzo Fill per la 2° Datatable
-chiudo il ciclo, creo un nuovo SqlDataAdapter e utilizzo Fill per la 1° Datatable
-poi faccio datatable1.merge(datatable2)

datagridview1.datasource=datatable1
datagridview1.databind()

A questo punto, come già accennato, il datagridview viene popolato con tutte le colonne, ma con i dati sfalsati, perchè vengono scritti prima i records della datatable1 e poi quelli della datatable2!

Per quanto riguarda la relazione non posso farla, perchè in locale non è detto che un prodotto sia censito, quindi non posso fare un join 1:1.

Spero di essere stato più chiaro.

Grazie ancora. Ciao
Modificato da matteoct il 24 agosto 2011 00.42 -
Modificato da matteoct il 24 agosto 2011 00.44 -
272 messaggi dal 17 settembre 2006
matteoct ha scritto:
Intanto grazie a tutti per gli ottimi consigli.
In merito a quanto ha suggerito Giovinda, è proprio quello che sto cercando di fare, ma i risultati della tabella 1 non sono allineati con la seconda datatable!

Faccio un breve esempio della mia situazione:
Ho diverse sedi di un'azienda. Dalla sede centrale, tramite la mia applicazione e con una dropdownlist, seleziono l'azienda dalla quale visualizzare i dati, dopodichè popolo la gridview. Fin quì nulla di particolare.

La query va ad elencare i prodotti disponibili nell'azienda selezionata ed io, per ogni riga del gridview, devo sapere se quel prodotto è presente in magazzino o meno (quest'ultimo dato disponibile su Db esterno).

Quindi, riassumendo:
- Seleziono tutti i prodotti dell'azienda X
-per ogni prodotto, calcolo la disponibilità nel magazzino (dato disponibile su Db della sede centrale)
-Popolare il gridview con i dati del prodotto e della disponibilità in magazzino.

Io faccio questo ed ottengo i dati giusti, ma non sono allineati nel gridview, nel senso che vengono scritte prima le righe della datatable1, quindi dei prodotti, poi quelle della disponibilità in magazzino, quindi della 2° datatable:

-dichiaro le due datatable
-scrivo la query (seleziona tutti i prodotti di quell'azienda)
-apro la connessione con SqlCommand
-creo un datareader
-poi con un ciclo:
while reader.read
....
qui con un'altra query mi calcolo il totale del singolo prodotto

-creo un nuovo SqlDataAdapter e utilizzo Fill per la 2° Datatable
-chiudo il ciclo, creo un nuovo SqlDataAdapter e utilizzo Fill per la 1° Datatable
-poi faccio datatable1.merge(datatable2)

datagridview1.datasource=datatable1
datagridview1.databind()

A questo punto, come già accennato, il datagridview viene popolato con tutte le colonne, ma con i dati sfalsati, perchè vengono scritti prima i records della datatable1 e poi quelli della datatable2!

Per quanto riguarda la relazione non posso farla, perchè in locale non è detto che un prodotto sia censito, quindi non posso fare un join 1:1.

Spero di essere stato più chiaro.

Grazie ancora. Ciao
Modificato da matteoct il 24 agosto 2011 00.42 -
Modificato da matteoct il 24 agosto 2011 00.44 -

il fatto che Prima visualizzi le righe della prima e poi quelle della seconda, usando il metodo merge, mi sembra piu che corretto, visto che tale metodo si limita ad unire; e come se facessi una union all in t-sql su sql server.

per verificare la presenza dei prodotti tra due tabelle
mi viene in mente appunto di metterle in left join prendendo tutti i dati della tabella Padre e verificando con is null l'id della tabella figlio
30 messaggi dal 13 giugno 2011
Si, credo sia la scelta migliore, proverò con left join.

Grazie
ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.