Combobox databinding

lunedì 12 luglio 2004 - 14.25

lobax Profilo | Junior Member

ciao sono inchiodato su uno stupido databinding
non mi carica 1 delle 2 combobox , in pratica una delle due viene saltata, indifferente quale, questo dipende se l'istruzione è prima o dopo.
vi posto il codice:
Private my_ds As DataSet

Private Sub LoadRealtions()
Dim my_re_for As DataRelation
Dim my_re_cat As DataRelation
Dim my_col_padre_for As DataColumn
Dim.............ecc..ecc


my_ds.Relations.Add(my_re_for)
my_ds.Relations.Add(my_re_cat)



Catch ex As Exception
MessageBox.Show(ex.Message, "Routine LoadRealations")
End Try
End Sub
Private Function GetMaxPid()
Dim my_dr As DataRow
Dim IntmaxId As Integer
Try
IntmaxId = 0
For Each my_dr In my_ds.Tables("Prodotti").Rows
If CInt(my_dr.Item("Pid")) > IntmaxId Then
IntmaxId = CInt(my_dr.Item("Pid"))
End If
Next
Return IntmaxId
Catch ex As Exception
MessageBox.Show(ex.Message, "GetMaxPid")
End Try
End Function

Private Sub loadGlobalDataset()

Dim my_da As SqlClient.SqlDataAdapter
Dim my_str As String

Dim SQL_Fornitori As String
Dim SQL_Categorie As String
SQL_Categorie = "ProductCategoryList"
SQL_Fornitori = "FornitoriList"

Dim c As New UseConnect.CommonA
my_str = c.BuildConnString()

Try
my_ds = New DataSet
my_da = New SqlClient.SqlDataAdapter("ProductList", my_str)
my_da.Fill(my_ds, "Prodotti")
With my_ds.Tables("Prodotti")
.PrimaryKey = New DataColumn() {.Columns("Pid")}
my_da.SelectCommand.CommandType = CommandType.StoredProcedure
End With
my_ds.Tables("Prodotti").Columns("Pid").AutoIncrement = True
my_ds.Tables("Prodotti").Columns("Pid").AutoIncrementSeed = GetMaxPid() + 1

my_ds.Tables("Prodotti").Columns("pid").AutoIncrementStep = 1

my_da.SelectCommand.CommandText = SQL_Fornitori
my_da.Fill(my_ds, "Fornitori")
With my_ds.Tables("Fornitori")
.PrimaryKey = New DataColumn() {.Columns("IdFornitore")}
my_da.SelectCommand.CommandType = CommandType.StoredProcedure
End With

my_da.SelectCommand.CommandText = SQL_Categorie
my_da.Fill(my_ds, "Categorie")
With my_ds.Tables("Categorie")
.PrimaryKey = New DataColumn() {.Columns("idcat")}
my_da.SelectCommand.CommandType = CommandType.StoredProcedure
End With

Catch ex As Exception
MessageBox.Show(ex.Message, "LoadGlobalDataset")
End Try

End Sub

Private Sub doBindings()


Try


TextID.DataBindings.Add..........ecc

ComboFOR.DataSource = my_ds.Tables("Fornitori") 'carica solo la prima combo
ComboFOR.DisplayMember = "RagSociale"
ComboFOR.ValueMember = "idFornitore"
ComboFOR.DataBindings.Add("SelectdedValue", my_ds.Tables("Prodotti"), "idFornitore")

ComboCAT.DataSource = my_ds.Tables("Categorie") 'a 2 non la carica, se inverto è il contrario
ComboCAT.DisplayMember = "Nome_cat"
ComboCAT.ValueMember = "idcat"
ComboCAT.DataBindings.Add("SelectdedValue", my_ds.Tables("Prodotti"), "idcat")

Catch ex As Exception
MessageBox.Show(ex.Message, " routine doBindings()")'l'errore è:(could not bind the new value member. parameter neme: value)
End Try
End Sub
vi ho scritto tutte le routines per dare un quadro un po'+ completo .
grazie scusate la lunghezza .

Brainkiller Profilo | Guru

Ciao,
io con le DataRelation ci ho litigato per parecchio.
Visto che non posso testare di persona il codice che hai postato, e così vedendolo la prima volta è difficile entrare nel meccanismo e capire esattamente come funziona, ti consiglio magari di eliminare se puoi o far ignorare le data releations e far caricare il contenuto delle tabelle nelle combo box. Se così funzionasse almeno hai capito dove sta la causa e sai dove puntare.
In questi casi, dopo una sessione di debug approfondita, meglio andare per esclusione per capire dove sta il problema.

ciao
david

lobax Profilo | Junior Member

tra l'altro la routine Private Sub LoadRealtions() non viene nemmeno caricata il debugger mi da un valore vuoto in nell' indice id di una delle 2 tabelle categorie o fornitori, così anche se tolgo LoadRealtions() non cambia nulla.....mah grazie lostesso
ciao

Brainkiller Profilo | Guru

Allora in questo caso, dovresti cavartela con una approfondita sessione di debug. no ?

ciao
david

lobax Profilo | Junior Member

ciao,
dopo aver girato e voltato il codice e essermi venuto il mal di testa a debbuggare ho scoperto che la posioione di alcune righe ne determinavano l'interruzione prima o dopo del codice stesso, ora riesco a vedere e a caricare il dataset per intero e a databindarlo nei controlli ma ottengo un errore ti casting su questa riga:

ComboCAT.DataBindings.Add("SelectdedValue", my_ds.Tables("Prodotti"), CInt("IDcat"))

ma il controllo si carica regolarmente,
stessa cosa se inverto le riga della seconda combo:

ComboCAT.DataBindings.Add("SelectdedValue", my_ds.Tables("Prodotti"), CInt("idFornitore"))

orrengo invecie un errore di: "cannot bind to property SelectedValue on target control parameter name: Property name. se non effettuo la conversione in intero con il "CInt" in questo modo:

ComboCAT.DataBindings.Add("SelectdedValue", my_ds.Tables("Prodotti"), ("IDcat"))

ma anche qui il form e i controlli vengono visualizzati regolarmente.

qualche sospetto?
ciao grz

Brainkiller Profilo | Guru

Prova così :
ComboCAT.DataBindings.Add(new Binding("SelectdedValue"), my_ds, "nometabella.idFornitore")

Sostituisci nometabella con il nome della tabella nel DataSet.

ciao
david

lobax Profilo | Junior Member

in pratica quello che succede è esattamente questo:

ComboCAT.DataBindings.Add("SelectdedValue", my_ds.Tables("prodotti"), "IDcat")
qui va a fare il databinding sul campo idcat della tabella del ds "prodotti", se io tolgo questo binnding al valore "idcat" sulla tab prodotti e la lascio caricare dalla tabella "categorie " non ho nessun problema, ne deduco che non riesce as caricare la colonna dell'id esterno.
almeno ora so cosa e dove sia l'elemento che genera l'errore..

ma resta da capire il perchè.
ciao scusa se rompo.

lobax Profilo | Junior Member

a si dimenticavo che come mi hai fatto vedere tu ottengo lo stesso comportamento

Brainkiller Profilo | Guru

Non rompi non preoccuparti.
Risulta però difficile capire la struttura del DB ed entrare nel programma da me come esterno.
Se fossi lì al tuo fianco magari si risolverebbe più in fretta.
Spesso con il debug si riescono a capire molte cose.

ciao
david
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