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
Problema di binding Combobox complesso, chiedo un consiglio.
domenica 21 dicembre 2008 - 16.03
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
plaguebreath
Profilo
| Junior Member
115
messaggi | Data Invio:
dom 21 dic 2008 - 16:03
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 ???
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 !