Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Combobox databinding
lunedì 12 luglio 2004 - 14.25
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lobax
Profilo
| Junior Member
93
messaggi | Data Invio:
lun 12 lug 2004 - 14:25
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
7.999
messaggi | Data Invio:
lun 12 lug 2004 - 23:37
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
93
messaggi | Data Invio:
mar 13 lug 2004 - 20:06
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
7.999
messaggi | Data Invio:
mar 13 lug 2004 - 22:56
Allora in questo caso, dovresti cavartela con una approfondita sessione di debug. no ?
ciao
david
lobax
Profilo
| Junior Member
93
messaggi | Data Invio:
mer 14 lug 2004 - 17:34
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
7.999
messaggi | Data Invio:
gio 15 lug 2004 - 08:42
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
93
messaggi | Data Invio:
ven 16 lug 2004 - 10:11
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
93
messaggi | Data Invio:
ven 16 lug 2004 - 10:12
a si dimenticavo che come mi hai fatto vedere tu ottengo lo stesso comportamento
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 16 lug 2004 - 22:30
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
Torna su
Stanze Forum
Elenco Threads
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 !