Problema di binding Combobox complesso, chiedo un consiglio.

domenica 21 dicembre 2008 - 16.03

plaguebreath Profilo | Junior Member

La situazione è questa, ho un dataset riempito con questa query

strsql = "SELECT Movimenti.IDMovimenti, Genere.IDGenere as IDGenere,Genere.DescGenere as DescGenere, Movimenti.DescMovimenti, ContoDaA.DescConto AS ContoDa, " _
& " ContoDaA_1.DescConto as ContoA, Movimenti.Spesa, Movimenti.DataMovimento, Movimenti.isdeleted, " _
& " Movimenti.MovimentiTime , ContoDaA.IdConto AS IDContoDa, ContoDaA_1.IdConto AS IDContoA " _
& " FROM ContoDaA INNER JOIN " _
& " Genere INNER JOIN " _
& " Movimenti ON Genere.IDGenere = Movimenti.IDGenere ON ContoDaA.IDConto = Movimenti.IDContoDa INNER JOIN " _
& " ContoDaA AS ContoDaA_1 ON Movimenti.IDContoA = ContoDaA_1.IDConto order by DataMovimento asc"

Come si vede faccio un join sulla stessa tabella 2 volte e + una volta su Genere perchè ho bisogno di visualizzare a video i nomi relativi agli ID di dette tabelle.
Il mio problema è questo, ho un bindingsource che è utilizzato da un datagrid un bindingnavigator e da textbox checkbox e 3 combobox appunto, tutto andrebbe anche bene, se non fosse per le 3 combobox.
Vorrei che le Combobox quando non sono in modalità edit o insert record visualizzassero il contentuto corretto della riga selezionata nel datagridview bindato, nel momento per in cui vado in modalità insert o edit vorrei che la combobox fosse riempita con tutti i campi e valori presenti in Genere, ContoDa e ContoA e che il cambiamento di detti valori mi venisse riflesso anche nel bindingsource principale così da poter slavare i dati inseriti o modificati correttamente nel database. A questo proposito chiedo suggeriemento dopo ormai averci sbattuto la testa per 2 settimane e precisando che sono un novellino. Grazie a chi mi saprà togliere da questo pantano.

Aggiorno la domanda.
Ho una tabella Movimenti, al suo interno ci sono svariati campi tra cui un campo IDGenere che è la chiave primaria della tabella Genere, un campo IDContoDa che è la chiave primaria della tabella ContoDaA e poi ho un IDContoA che è la chiave primaria della tabella ContoDaA_1

per creare la suddetta struttura della tabella e metterla in in dataset uso questa stringa SQL

codice:

strsql = "SELECT Movimenti.IDMovimenti, Genere.IDGenere as IDGenere,Genere.DescGenere as DescGenere, Movimenti.DescMovimenti, ContoDaA.DescConto AS ContoDa, " _
& " ContoDaA_1.DescConto as ContoA, Movimenti.Spesa, Movimenti.DataMovimento, Movimenti.isdeleted, " _
& " Movimenti.MovimentiTime , ContoDaA.IdConto AS IDContoDa, ContoDaA_1.IdConto AS IDContoA " _
& " FROM ContoDaA INNER JOIN " _
& " Genere INNER JOIN " _
& " Movimenti ON Genere.IDGenere = Movimenti.IDGenere ON ContoDaA.IDConto = Movimenti.IDContoDa INNER JOIN " _
& " ContoDaA AS ContoDaA_1 ON Movimenti.IDContoA = ContoDaA_1.IDConto"

dsMovimenti = New DataSet("Movimenti")

'crea dataadapter
daMovimenti = New SqlDataAdapter(strsql, strconn)

daMovimenti.Fill(dsMovimenti, "Movimenti")

dsMovimenti.Tables("Movimenti").Columns(0).AutoIncrement = True
dsMovimenti.Tables("Movimenti").Columns(0).AutoIncrementSeed = -1
dsMovimenti.Tables("Movimenti").Columns(0).AutoIncrementStep = -1
Dim drkey(0) As DataColumn
drkey(0) = dsMovimenti.Tables("Movimenti").Columns(0)

bdsMovimenti = New BindingSource() 'creazione del bindingsource
bdsMovimenti.DataSource = dsMovimenti.Tables("Movimenti") 'associazione del datasource al Dataset

CreaDatagridView(1)

dsMovimenti.Tables("Movimenti").Columns("isdeleted").DefaultValue = False

dsMovimenti.Tables("Movimenti").Columns("IDGenere").DefaultValue = 1

dsMovimenti.Tables("Movimenti").Columns("IDContoDA").DefaultValue = 1

dsMovimenti.Tables("Movimenti").Columns("IDContoA").DefaultValue = 1
'imposto i valori di default delle colonne altrimenti addnew non mi funziona

dsGenere = New DataSet("Genere")


'crea dataadapter
daGenere = New SqlDataAdapter("SELECT IDGenere,DescGenere FROM Genere ORDER BY IDGenere;", strconn)


daGenere.Fill(dsGenere, "Genere")

bdsGenere = New BindingSource() 'creazione del bindingsource
bdsGenere.DataSource = dsGenere.Tables("Genere") 'associazione del datasource al Dataset

dsContoDaA = New DataSet("ContoDa")
dsContoDaA2 = New DataSet("ContoA")

''crea dataadapter
daContoDaA = New SqlDataAdapter("SELECT IDConto as IDContoDa,DescConto as ContoDa FROM ContoDaA ORDER BY IDContoDa;", strconn)
''Fill del dataset
daContoDaA.Fill(dsContoDaA, "ContoDa")

bdsContoDaA = New BindingSource() 'creazione del bindingsource
bdsContoDaA.DataSource = dsContoDaA.Tables("ContoDa") 'associazione del datasource al Dataset

''crea dataadapter
daContoDaA2 = New SqlDataAdapter("SELECT IDConto As IDContoA,DescConto as ContoA FROM ContoDaA ORDER BY IDContoA;", strconn)
''Fill del dataset
daContoDaA2.Fill(dsContoDaA2, "ContoA")

bdsContoDaA2 = New BindingSource() 'creazione del bindingsource
bdsContoDaA2.DataSource = dsContoDaA2.Tables("ContoA") 'associazione del datasource al Dataset

Il form ha svariate textbox un checkbox e 3 combobox 1 che dovrebbe permettermi di scegliere tutti i valori presenti nella tabella Genere e gli altri due nella tabella ContoDaA

codice:

Me.TextBox1.DataBindings.Add("text", bdsMovimenti, "IDMovimenti") 'associazione textbox1 alla sorgente bds "ID"
Me.TextBox2.DataBindings.Add("text", bdsMovimenti, "DescMovimenti") 'associazione textbox2 alla sorgente bds "Descrizione"

Me.TextBox3.DataBindings.Add("text", bdsMovimenti, "Spesa", True, DataSourceUpdateMode.OnPropertyChanged, "", "C")
Me.TextBox4.DataBindings.Add("text", bdsMovimenti, "DataMovimento", True, DataSourceUpdateMode.OnPropertyChanged, "", "dd/MM/yyyy")
Me.CheckBox1.DataBindings.Add("checked", bdsMovimenti, "isdeleted")

Me.ComboBox1.DataSource = bdsGenere
Me.ComboBox1.DisplayMember = "DescGenere"
Me.ComboBox1.ValueMember = "IDGenere"
Me.ComboBox1.DataBindings.Add("SelectedValue", bdsMovimenti, "IDGenere", True, DataSourceUpdateMode.OnPropertyChanged)
Me.ComboBox1.SelectionStart = 0

Me.ComboBox2.DataSource = bdsContoDaA
Me.ComboBox2.DisplayMember = "ContoDa"
Me.ComboBox2.ValueMember = "IDContoDa"
Me.ComboBox2.DataBindings.Add("SelectedValue", bdsMovimenti, "IDContoDa", True, DataSourceUpdateMode.OnPropertyChanged)
Me.ComboBox2.SelectionStart = 0


Me.ComboBox3.DataSource = bdsContoDaA2
Me.ComboBox3.DisplayMember = "ContoA"
Me.ComboBox3.ValueMember = "IDContoA"
Me.ComboBox3.DataBindings.Add("SelectedValue", bdsMovimenti, "IDContoA", True, DataSourceUpdateMode.OnPropertyChanged)

Me.ComboBox3.SelectionStart = 0

Tutto bene si direbbe, ho però il problema che quando premo un bottone che mi lancia il comando bdsmovimenti.addnew() posso selezionare tutti i campi correttamente, quando poi però finisco di inserire i dati e lancio un bdsmovimenti.endedit() tutte le textbox riportano i dati correttamente nel datagridview, però nella casella bianca del datagrid(non è impostata come combobox ma normale tabella di testo) la descrizione appare bianca, non ci sono errori di sorta perchè se do un update i comandi vengono eseguiti correttamente e il database si aggiorna con i dati corretti, infatti chiudendo e riaprendo il programma tutti i valori sono stati inseriti correttamente ... direi che il mio problema è associare la propietà text delle combobox alla riga correntemente aggiornata ... ma come fare visto che il bindingsource mi ha lasciato a piedi ???
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5