Form Master/Detail

venerdì 13 luglio 2007 - 15.17

SSUPERPIPPO Profilo | Guru

Volevo creare un Form Master/Detail (via codice, non con wizard) dove selezionando un valore su una combobox mi cambi il contenuto di un DataGrid.

E' possibile sfruttando il BindingManager automatizzare la selezione?
Qualcuno ha qualche soluzione?

Grazie

Alessandro

Cteniza Profilo | Guru

Con due datagridview
http://community.visual-basic.it/lucianob/archive/2007/06/22/19710.aspx

SSUPERPIPPO Profilo | Guru

Ciao e grazie per la risposta.

Ho implementato le due datagrid ma ho un'altro problema!
Le due tabelle devono avere due colonne relazionate... io ho usato questo metodo:

Dim KeyColumnParent(1) As DataColumn

KeyColumnParent(0) = SqlDS.Tables("Famiglie").Columns("CdFamiglia")
KeyColumnParent(1) = SqlDS.Tables("Famiglie").Columns("CdAzienda")

Dim KeyColumnChild(1) As DataColumn

KeyColumnChild(0) = SqlDS.Tables("AnagraficaComponenti").Columns("CdFamiglia")
KeyColumnChild(1) = SqlDS.Tables("AnagraficaComponenti").Columns("CdAzienda")

SqlDS.Relations.Add("ComponentiFamiglia", KeyColumnParent, KeyColumnChild)

passando quindi un array di DataColumn.

Stà di fatto che non funziona! La tabella Child mi viene restituita vuota.
Se creo invece una relazione con una sola colonna allora dà un risultato... nel mio caso non quello che mi server.

Mi sai aiutare?

Grazie

Ciao

Alessandro

Cteniza Profilo | Guru

Ti confesso, forse perchè oggi è venerdi 13 non ho capito niente magari vedendo in funzione il progetto ((:

SSUPERPIPPO Profilo | Guru

Mi spiego meglio (vediamo se ci riesco...):

Ho creato due DataTable

I campi chiave del primo datatable sono CdAzienda e CdFamiglia; nel secondo datatable sono invece CdAzienda, CdFamiglia e CdComponente. Il campo CdFamiglia può assumere lo stesso valore per CdAzienda diversi.

Ho la necessità di relazionare le due colonne CdAzienda e CdFamiglia presenti in entrambe le tabelle in modo da avere una relazione univoca.

Qual'è la giusta formula per creare questo tipo di relazione?

Spero di essermi spiegato, grazie

Ciao

Alessandro

Cteniza Profilo | Guru

Una cosa del genere:
Me.dataSet1.Relations.AddRange(New System.Data.DataRelation() {New System.Data.DataRelation("Relation1", "Master", "Detail", New String() {"CodiceAzienda", "CodiceFamiglia"}, New String() {"CodiceAzienda", "CodiceFamiglia"}, false)})
Me.dataSet1.Tables.AddRange(New System.Data.DataTable() {Me.dataTable1, Me.dataTable2})

SSUPERPIPPO Profilo | Guru

Ciao, scusa se ti disturbo ancora con il mio problema...

ho provato a implementare quello che mi hai scritto ma in debug mi restituisce questa eccezione:

"Riferimento a un oggetto non impostato su un'istanza di oggetto"

Hai idea del perchè?

Io ho provato anche in questo modo:

Dim KeyColumnParent As DataRelation = New DataRelation("ComponentiFamiglia", "Famiglie", "AnagraficaComponenti", New String() {"CodiceAzienda", "CodiceFamiglia"}, New String() {"CodiceAzienda", "CodiceFamiglia"}, False)

DbDbase.SqlDS.Relations.Add(KeyColumnParent)

dove ho sbagliato?

Grazie per l'aiuto, Alessandro

Cteniza Profilo | Guru

Ti assicuro che l'ho tolto da un programma funzionante in cui avevo disegnato il dataset manualmente così come gli indici e relazioni.
Verifica di avere le cose giuste.
Ti estrapolo un frammento di codice da "applied ado.net ..."
Dim parentCols() As DataColumn
Dim childCols() As DataColumn
parentCols(0) = DataSet1.Tables("Customers").Columns("CustID")
parentCols(1) = DataSet1.Tables("Customers").Columns("OrdID")
childCols(0) = DataSet1.Tables("Orders").Columns("CustID")
childCols(1) = DataSet1.Tables("Orders").Columns("OrdID")
Dim CustOrderRel As DataRelation
CustOrderRel = New DataRelation("CustomersOrders", parentCols, childCols)

SSUPERPIPPO Profilo | Guru

Ho risolto il mio problema... come immaginavo era una ca..ata.

Ce l'avevo sotto gli occhi e non me n'ero accorto che il campo chiave della tabella Master conteneva dei valori non identici a quelli della tabella Child (c'erano degli spazi dopo). Per questo il programma non mi restituiva errore ma non mi dava nemmeno i risultati sperati. Ora funziona tutto.

Ti ringrazio per la tua disponibilità e per i comunque utili consigli.

Ciao

Alessandro
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