Ftro incrociato

martedì 16 settembre 2014 - 11.02
Tag Elenco Tags  VB.NET

zolamia Profilo | Newbie

Ciao a tutti ragazzi,
ho bisogno di capire come funziona un filtro incrociato.
Vi spiego meglio:
Ho un datagrid in cui ci sono i dati delle bolle caricate precedentemente e poi ho un combobox con il periodo (quindi i mesi dell'anno) e un altro combobox con la lista dei fornitori.
Il codice inserito è il seguente ma mentre per solo il periodo funziona per il fornitore e incrociato non funziona.
Il problema è che non riesco neanche a capire come funziona, se devo avere due SQLCommand e due commandtex diverse.
Qualcuno può aiutarmi a capire? grazie mille

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Grazie ragatti a tutti
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

Ciao,

imposta una query di base tipo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

poi crea la stringa where concatenata:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e infine metti insieme il tutto:

Dim query As String = sql If where.Length > 0 Then query = sql & " WHERE " & where cm.CommandText = sql

se ho sbagliato qualche parte di sintassi, mi scuso, è perchè ormai vb è un vecchio ricordo per me, sorry



Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

ciao ho fatto come dici tu ma non funziona .
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

cosa non funziona?

che errori ti ritorna?

hai provato a debuggare per vedere cosa c'è dentro alla variabile "sql" prima di settarla sul SelectCommand?


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

non mi da nessun errore, è solo che non m fa i filtri, ti posto il codice

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

stai attento, guarda qua:

If where.Length > 0 Then query = sql & " WHERE " & where cm.CommandText = sql

devi impostare query, non sql:

If where.Length > 0 Then query = sql & " WHERE " & where cm.CommandText = query




Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

sintassi non corretta in prossimità di ' Nome fornitore'
Ho fatto il debug e si blocca al

da.Fill(dataset1, tablename2)

Scusa puoi anche dirmi come faccio ad inserire il "Tutti i Fornitori" e poterlo visualizzare anche dopo aver selezionato un cliente?

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Grazie mille
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

ok questo però è un'altra cosa... quello di prima quindi funziona?


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

no quello di prima non funziona
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

>no quello di prima non funziona

cosa non funziona? che risultato ti da?


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

appena lo faccio partire mi da "errore di sintassi in prossimità di 'NOME FORNITORE'.
Ho fatto il debug e si blocca alla riga :

da.Fill(dataset1, tablename2)
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

>appena lo faccio partire mi da "errore di sintassi in prossimità
>di 'NOME FORNITORE'.
>Ho fatto il debug e si blocca alla riga :
>
>da.Fill(dataset1, tablename2)


eh, io non posso sapere che cosa sia "NOME FORNITORE".... se è un errore a runtime, mi pare sia un errore di sql quindi, prova a vedere di preciso come viene composta la variabile sql, vacci sopra con il mouse quando sei in debug, magari prima del verificarsi dell'errore (metti un breakpoint), e guarda che valore ha... controlla che la sintassi sia corretta e che possa essere eseguita sul tuo database senza problemi.


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

Allora il problema era in:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

modificato poi da me in:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
End If[/code]
in quanto con
where = where & "MovimentiMagazzino.ID_Fornitore = " & (ComboBoxFornitore.Text) & ""
non mi trovava in nome del Fornitore.

Con il codice però
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
mi fa il filtro ma se seleziono "Fornitore1" me lo filtra in base all'altro fornitore incluso nella combo.
Credo sia un problema di indice.



:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

"ID_Fornitore" è una stringa o un id numerico? se è un identity a database, quasi sicuramente non può corrispondere al SelectedIndex di una combobox, in quanto quello ritorna l'indice del sotto array di elementi della combo box, non ha niente a che vedere con il valore nel tuo database.

Ad ogni modo ho visto che setti come datasource tutto il datatable "dataset1.Tables(Fornitori)", e se modifichi la query in

"SELECT ID_Fornitore, ID_Cliente, R_Cliente,R_Tipo FROM ClientiFornitori WHERE R_Tipo = 'F' ORDER BY R_Cliente"

aggiungendo quindi "ID_Fornitore", quest'ultimo sarà a disposizione della combo per essere selezionato come SelectedValue, quindi puoi modificare il motodo CaricaFornitori così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e poi la query di filtraggio così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

Sai che c'ero arrivata a tutto quello che tu mi hai scritto ma il filtro non mi funziona e il "Tutti i fornitori" lo perdo strada facendo.
In pratica nn mi da alcun errore ma non mi funziona il filtro.

Adesso ti posto tutto il codice :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

C'è qualcosa che non va ma non riesco a capire cosa e poi quei "Tutti i fornitori" dove e come lo aggiungo?
Grazie mille davvero
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

non devi leggere ValueMember, ma SelectedValue:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e poi sei sicura che qui ci debba andare "ID_Cliente" e non "ID_Fornitore":

ComboBoxFornitore.DataSource = dataset1.Tables(Fornitori) ComboBoxFornitore.DisplayMember = "R_Cliente" ComboBoxFornitore.ValueMember = "ID_Cliente"

te lo chiedo perchè non conosco la struttura del tuo db, magari va bene ID_Cliente, però vedo che filtri per WHERE ID_Fornitore...

inoltre anche qui credo si nasconda un bug:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

SelectedIndex parte da 0, quindi devi aggiungere 1 per rappresentare correttamente il numero del mese:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


guarda meglio il tutto, e usa di più il debugger e il breakpoint, ti fa capire i punti dove sbagli, perchè puoi guardare durante l'esecuzione del programma i valori delle varie variabili, ad gni riga di codice che stai eseguendo.



Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

Funziona ma per quanto riguarda il periodo era giusto cosi come avevo fatto inizialmente
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Sono contentissima, menomale. Grazie
Un ultima cosa, come faccio a reinserire la riga "Tutti i Fornitori" nel ComboBoxFornitore una volta fatto un primo filtro?
Grazie mille davvero
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

>Un ultima cosa, come faccio a reinserire la riga "Tutti i Fornitori"
>nel ComboBoxFornitore una volta fatto un primo filtro?

cioè vuoi forzare la selezione della combobox sul valore "Tutti i Fornitori" programmaticamente?

dato che il "Tutti i fornitori" viene inserito come primo elemento della combo, sarà sufficiente fare così:

ComboBoxFornitore.SelectedIndex = 0



Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

zolamia Profilo | Newbie

facendo come dici tu non funziona proprio il filtro.
:::...Truly madly deeply...:::

0v3rCl0ck Profilo | Guru

sinceramente mi sono un po' perso, non capisco cosa tu voglia fare, e cosa non funziona, il filtro? in che senso? cioè se fai "SelectedIndex = 0" cosa succede? nella combo viene selezionato "Tutti i Fornitori"? Spiegami meglio, altrimenti non posso capire cosa stai facendo/vedendo.


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
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