38 messaggi dal 21 luglio 2006
Avrei la necessità di popolare una combox utilizzando un file XLM strutturato nel modo seguente:


<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2018-11-04T13:35:13"><Provincie>
<ID>1</ID>
<Prov>AGRIGENTO</Prov>
<Sigla>AG</Sigla>
<Regione>SICILIA</Regione>
<Comuni>
<ID>22</ID>
<Comune>Agrigento</Comune>
<Provincia>AG</Provincia>
<Regione>SICILIA</Regione>
<CodFisco>A089</CodFisco>
</Comuni>
<Comuni>
<ID>94</ID>
<Comune>Alessandria della Rocca</Comune>
<Provincia>AG</Provincia>
<Regione>SICILIA</Regione>
<CodFisco>A181</CodFisco>
</Comuni>
</Provincie>
<Provincie>
<ID>2</ID>
<Prov>ALESSANDRIA</Prov>
<Sigla>AL</Sigla>
<Regione>PIEMONTE</Regione>
<Comuni>
<ID>66</ID>
<Comune>Albera Ligure</Comune>
<Provincia>AL</Provincia>
<Regione>PIEMONTE</Regione>
<CodFisco>A146</CodFisco>
</Comuni>
<Comuni>
<ID>92</ID>
<Comune>Alessandria</Comune>
<Provincia>AL</Provincia>
<Regione>PIEMONTE</Regione>
<CodFisco>A182</CodFisco>
</Comuni>

Praticamente ho un elenco di tutte le provincie italiane e per ogni Provincia un elenco dei relativi Comuni.
Vorrei, selezionando una provincia da una combox, popolare altre due combox, una dei comuni e una del codice Comune, della provincia selezionata; ho provato ha scrivere il seguente codice (ma non funziona):
ProvSele = ProvincieToolStripComboBox.SelectedItem(2)
Dim ProvComuniDataSet As New Data.DataSet
                ProvComuniDataSet.ReadXml(Application.StartupPath + "\Provincie.xml")


                
                ComuneToolStripComboBox.ComboBox.DataSource = ProvComuniDataSet.Tables("Provincie").Columns("Comuni")
                ComuneToolStripComboBox.ComboBox.DisplayMember = "Comune"
                CodiceComuneToolStripComboBox.ComboBox.DataSource = ProvComuniDataSet.Tables("Provincie").Columns("Comuni")
                CodiceComuneToolStripComboBox.ComboBox.DisplayMember = "CodFisco"

La mia difficoltà è come dire al programma di selezionare solo i comuni della provincia selezionata (ProvSele)
Spero di essere stato chiaro

Giorgio
11.050 messaggi dal 09 febbraio 2002
Contributi
Ciao Giorgio,
anziché mettere in binding la DataTable che contiene tutte le righe, usa invece un DataView che ti consentirà di filtrare e ordinare le righe del DataTable.

C'è un esempio in questo articolo:
https://www.c-sharpcorner.com/UploadFile/satyapriyanayak/filtering-a-dataset-using-dataview-and-select-method-in-vb-n/

Ecco la parte rilevante, adattala per le tue esigenze.
Dim dv As DataView = New DataView(ds.Tables("student"))
dv.RowFilter = "smarks>70"
dv.Sort = "smarks asc"
'Metto in binding il DataView anziché il DataTable
ListBox1.DataSource = dv


ciao,
Moreno
Modificato da BrightSoul il 04 novembre 2018 18.51 -

Enjoy learning and just keep making
38 messaggi dal 21 luglio 2006
Ciao Moreno,
ho seguito il tuo esempio, ma non riesco a gestire la sintassi della prorietà RowFilter, ho scritto il seguente codice:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        ds.ReadXml("D:\temp\Provincie.xml")
        ComboBox1.DataSource = ds.Tables("Provincie")
        ComboBox1.DisplayMember = "NomeProv"
        ComboBox1.SelectedIndex = 0

        Dim dv As DataView = New DataView(ds.Tables("Comuni"))
        DataGridView1.DataSource = dv

        dv.RowFilter = "SiglaProv =" & ComboBox1.SelectedItem(2)
        dv.Sort = "SiglaProv ASC"

        ComboBox2.DataSource = dv
        ComboBox2.DisplayMember = "Comune"
        ComboBox2.SelectedIndex = 0


        ComboBox3.DataSource = dv
        ComboBox3.DisplayMember = "CodFisco"
        ComboBox3.SelectedIndex = 0
    End Sub

Praticamente vorrei che mi filtrasse tutti i comuni della provincia X dato dal valore ComboBox1.SelectedItem(2), ma per questo valore X (nella riga dv.RowFilter) segnala "Impossibile trovare la colonna X", ma X non dovrebbe essere il mio filtro di ricerca? Sbaglio nella sintassi?
Grazie

Giorgio
11.050 messaggi dal 09 febbraio 2002
Contributi
Ciao Giorgio,

Sbaglio nella sintassi?

Già, perché essendo una stringa devi qualificarla con gli apici. In assenza degli apici, ADO.NET pensa che tu voglia confrontare i valori di due colonne ed è per questo che ti risponde "Impossibile trovare la colonna X". E' la stessa cosa che vale anche per le query SQL. Se devo filtrare per provincia scriverò:

provincia=Macerata
provincia='Macerata'


Quindi prova così:
 dv.RowFilter = "SiglaProv = '" & ComboBox1.SelectedItem(2) & "'"


Attenzione perché se la stringa contiene essa stessa degli apici (es. L'Aquila) devi raddoppiarli. Cioè:
 dv.RowFilter = "SiglaProv = '" & ComboBox1.SelectedItem(2).Replace("'", "''") & "'"



ciao,
Moreno

Enjoy learning and just keep making
38 messaggi dal 21 luglio 2006
Ciao Moreno,
ho risolto in questa maniera:
dv.RowFilter = String.Format("SiglaProv like '%{0}%'", ComboBox1.SelectedItem(2))

Grazie

Giorgio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.