Datagridview di due tabelle sql

venerdì 02 aprile 2010 - 15.06

zerep Profilo | Newbie

Ciao a tutti,
ho due tabelle SQL:
Aziende e Dipendenti
Le colonne di Aziende sono: AziendaID (bigint primary key), NomeAzienda (nvarchar 50), Citta (nvarchar 50)
Le colonne di Dipendenti sono: DipendenteID (bigint e primary key), NomeDipendente (nvarchar 50), NomeAzienda (nvarchar 50), Citta (nvarchar 50)
Ho una relazione fra le due tabelle dove NomeAzienda (nvarchar 50) e Citta (nvarchar 50) della tabella Dipendenti sono chiave esterna delle medesime colonne della tabella primaria Aziende.
Ovviamente ho dovuto definire Unique queste due colonne sulla tabella Aziende.

Rappresento in un datagridview la tabella Dipendenti:
DipendenteID | NomeDipendente | NomeAzienda | Citta
attualmente ho un combobox nella colonna Azienda che mi fa scegliere fra le Aziende presenti nella tabella Aziende e di consegnuenza aggiorna la colonna Citta (valore non modificabile dall'utente).
Fin qui tutto funziona.

La domanda è: considerato che dal punto di vista del DataBase il miglior modo di mettere in relazione la tabelle sarebbe:
Aziende: AziendaID (bigint primary key), NomeAzienda (nvarchar 50), Citta (nvarchar 50)
Dipendenti: DipendenteID (bigint e primary key), NomeDipendente (nvarchar 50), AziendaID (bigint)
Con relazione fra AziendaID della tabella Dipendenti come chiave esterna delle medesima colonna della tabella primaria Aziende.
come posso mostrare in un datagridview le colonne che desidero (DipendenteID | NomeDipendente | NomeAzienda | Citta) ?
Grazie, ciao

kataklisma Profilo | Senior Member

Ciao!

Basta semplicemente una query di Join tra aziende e dipendenti dove il Aziende.AziendaID = Dipendenti.AziendaID.


Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

zerep Profilo | Newbie

Ciao Ignazio,
scusa ma sono alle prime armi, intendi dire che nel designer del dataset metto le due tabelle e aggiungo la query di join oppure che nel designer debbo creare a questo punto una nuova tabella:
DipendenteID | NomeDipendente | NomeAzienda | Citta
e definire su questa la query di join?
Se non sbaglio una datagridview deve fare riferimento ad un solo datatable?

kataklisma Profilo | Senior Member

Si, devi creare una tabella nel designer impostargli la query di join ed usarla solo per le "select".

Ovvero, tasto destro, aggiungi => Query => Imposta tutti i parametri necessari.

Comunque un consiglio spassionato, se sei alle prime armi lascia perdere gli editor ;)
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

zerep Profilo | Newbie

Ignazio,
per tua esperienza, che problemi vedi nel primo modo di operare?
Grazie, ciao

kataklisma Profilo | Senior Member

Molti fanno l'errore di non distinguere visual studio dal .Net SDK.

Visual Studio è un IDE che aiuta moltissimo la vita dello sviluppatore professionista ma nel contempo è nemico di chi sta imparando ad usare la piattaforma .Net.

Hai mai provato a vedere il codice autogenerato da VS per l'interfaccia grafica?I delegati aggiunti per la gestione degli eventi dei componenti?

Ci sono operazione che VS fa in automatico, e che giovano a chi con VS ci lavora!

Il designer dei dataset, il designer LINQ, sono formidabili, ma sai effettivamente come gestire a livello di codice cio che tu progetti a livello grafico?

Se un domani ti dovessi trovare a lavorare con un'IDE diverso da VS sapresti cavartela?

:)


Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

zerep Profilo | Newbie

Intendevo chiederti se per tua esperienza vedi problemi nel gestire i dati come ho descritto nel primo post fino alla frase "Fin qui tutto funziona"?

Ho comunque cercato di fare come mi hai suggerito:
aggiunto un datadable: Table_Dipendenti.Id, Table_Dipendenti.Nome, Table_Aziende.Nome, Table_Aziende.Citta

La select funziona bene:

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

Per quanto riguarda l'update ho scritto:

UPDATE Table_Dipendenti SET Id = @Id, Nome = @Nome, IdAzienda = (SELECT Id FROM Table_Aziende WHERE (Id = @IdAzienda))

ma non aggiorna nulla. Dove sbaglio?

ciao

kataklisma Profilo | Senior Member

Ciao!

Puoi spiegarmi il modo in cui effettui l'update?Riporta il codice.

;)
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

zerep Profilo | Newbie

Purtroppo non sono ancora riuscito a lavorare senza designer, di conseguenza non faccio altro che mettere nell'updatetext dell'updatecommand del tableadapter la query:

UPDATE Table_Dipendenti SET Id = @Id, Nome = @Nome, IdAzienda = (SELECT Id FROM Table_Aziende WHERE (Id = @IdAzienda))

Ciao

kataklisma Profilo | Senior Member

>Purtroppo non sono ancora riuscito a lavorare senza designer,
>di conseguenza non faccio altro che mettere nell'updatetext dell'updatecommand
>del tableadapter la query:
>
>UPDATE Table_Dipendenti
>SET Id = @Id, Nome = @Nome, IdAzienda =
> (SELECT Id
> FROM Table_Aziende
> WHERE (Id = @IdAzienda))
>
>Ciao


In questa Query manca la clausola where, ad esempio :

UPDATE Table_Dipendenti SET Id = @Id, Nome = @Nome, IdAzienda = (SELECT Id FROM Table_Aziende WHERE (Id = @IdAzienda)) WHERE Id = 3

Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

zerep Profilo | Newbie

Ho provato come hai detto ma non effettua l'update.
Preciso che l'update viene chiamato da un button con codice:

this.dataTable1BindingSource.EndEdit(); this.dataTable1TableAdapter.Update(this.provaDataSet.DataTable1);

Ciao
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