Problema DataBinding ComboBox

domenica 22 luglio 2007 - 18.07

eddievh Profilo | Newbie

Per prima cosa un saluto a tutti, leggo da molto il froum ma non ho mai postato. Ora sono in difficoltà e
spero mi possiate dare una mano. In futuro spero di poter contraccambiare.

Ho una situazione di questo tipo:
- una tabella articoli con vari dati fra cui una Categoria e una Sottocategoria
- una tabella categorie ( chiave primaria Nome)
- una tabella sottocategorie (chiave primaria Nome) collegata alla precedente con una chiave esterna chiamata Parent

Per cui ogni categoria ha delle sottocategorie

Carico una DataGridView (DGV) con i dati della tabella articoli

artDA.Fill(artDS, "ARTICOLI") ' riempie il DataSet attraverso il DataAdapter
' Collego il Binding Source
artBS.DataSource = artDS
artBS.DataMember = "ARTICOLI"

' Popolamento DGV
articoliDGV.DataSource = artBS

Faccio una cosa simile anche per la Combo Categorie (CMB1)

artCatDA.Fill(artCatDS, "CATEGORIE")
artCatBS.DataSource = artCatDS
artCatBS.DataMember = "CATEGORIE"

e li collego insieme in modo che siano sincronizzati

CMB1.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", artBS, "Categoria", True, _ DataSourceUpdateMode.OnPropertyChanged))
CMB1.DataSource = artCatBS
CMB1.DisplayMember = "Nome"
CMB1.FormattingEnabled = True
CMB1.ValueMember = "Nome"

A questo punto quando seleziono una riga della DGV mi carica correttamente la rispettiva categoria nella CMB1 attraverso
la quale posso cambiarla con una delle altre disponibili

E fin qua tutto OK. Veniamo al problema.
Ho una seconda Combo che rappresenta le sottocategorie (CMB2). Se faccio la stessa cosa che ho fatto con la CMB1
mi visualizza correttamente la sottocategoria della riga selezionata ma ovviamente permette di selezionare tutte le sottocategorie
indipendentemente dalla categoria principale selezionata in CMB1.

Quello che voglio è fare in modo che la combo delle sottogategorie visualizzi solo gli elementi che hanno come padre la categoria selezionata in CMB1.

Non so come fare a fare questo triplice collegamento quindi spero che qualcuno mi possa aiutare.

Spero di essermi spiegato bene, comunque sono pronto ad ogni chiarimento. Grazie in anticipo!

Ciao!!!

Cteniza Profilo | Guru

Se usi due bindingsource per le due combo puoi fare come questo esempio tratto dal mio blog:
http://community.visual-basic.it/lucianob/archive/2007/03/01/18705.aspx
Private Sub BindingSource1_PositionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingSource1.PositionChanged
Dim dr As DataRowView = CType(BindingSource1.Current, DataRowView)
BindingSource2.Filter = "ID = " & CType(dr("IdAttributo"), String)
End Sub

eddievh Profilo | Newbie

Il filtro funziona perfettamente.
Grazie

Purtroppo mi da problemi con i valori nulli.

Nel mio programma le sottocategorie possono essere lasciate vuote quindi non appare nessun valore nella riga della DGV
e non dovrebbe apparire niente neanche nella combo.
Con il filtro invece viene selezionata subito la prima voce e non posso lasciare la combo vuota.
Qualche suggerimento? (Anche con altri sistemi)

Ciao
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5