Ricerca multipla record SQL Server 2005 express.

domenica 17 gennaio 2010 - 20.32

Geronimo79 Profilo | Junior Member

Salve a tutti....Se ho una listbox che nella sua proprietà "item" contiene i valori 1-2-3-4-22-25 vorrei creare una query che mi restituisca in una gridview gli "ID" 1-2-3-4-22-25 presenti nella tabella "A" (che è bindata al gridview in wizard e contiene un dataset e una table adapter). Credo che il problema riguardi la costruzione di una query SQL abbinata a un ciclo FOR EACH ma essendo un principiante non sò come venir fuori a questa problematica....

Jeremy Profilo | Guru

Ciao.
In realtà potresti fare tutto valorizzando solo la proprietà Filter del BindingSource(che ti ha creato il wizard) .... ma per far questo devi assicurarti che il DataSource del GridView sia proprio il BindingSource.
La proprietà Filter dovrai valorizzarla più o meno in questo modo
For Each item As Object In ListBox1.Items If ListBox1.Items.IndexOf(item) > 0 Then bs.Filter += " OR " End If bs.Filter += "ID = " & item.ToString Next

Questa è solo un'idea .... prendi spunto da questo ed adattala alle tue esigenze.
Facci sapere....
Ciao


P.S. Per domande di questo tipo (e dell'altra al quale ti ho risposto), forse, la sezione giusta dovrebbe essere questa:
http://www.dotnethell.it/forum/Windows-Forms.aspx
Ciao.

Geronimo79 Profilo | Junior Member

--Errore di sintassi: operando mancante dopo l'operatore 'Or' --

Geronimo79 Profilo | Junior Member

Ho fatto come indicato da te....ma ho il seguente errore:
--Errore di sintassi: operando mancante dopo l'operatore 'Or' -- (cosa andava messo in quel punto????? io nn ho messo niente....)

Ovviamente ho adattato il tuo codice alle mie esigenze, ed ho bindato la gridview...ecc...ecc....La listbox non è bindata....

ho provato così:

For Each item As Object In ListBox1.Items
If ListBox1.Items.IndexOf(item) > 0 Then
mioBindingSource.Filter = "ID = " & item.ToString
End If
Next

Ma la gridview mi restituisce soltanto 1 record....che è l'ultimo dell'ordine della listbox!!!!

Dove sbaglio?????

Jeremy Profilo | Guru

Ciao.
Non mi sembra tu abbia fatto come ti ho indicato io .... prova a guardare bene il codice che ti ho indicato.
For Each item As Object In ListBox1.Items If ListBox1.Items.IndexOf(item) > 0 Then bs.Filter += " OR " End If bs.Filter += "ID = " & item.ToString Next
Attenzione che la condizione che aggiunge l'opetratore "OR" alla stringa .... DEVE essere scritto prima dell'istruzione bs.Filter += "ID = " & item.ToString.

Se continui a ricevere l'errore posta il codice che hai scritto tu.
Quello che hai postato sopra non va bene .... è normale che ti restituisca un solo record

Facci sapere...
Ciao

Geronimo79 Profilo | Junior Member

No Jeremy.....avevo inizialmente usato il tuo codice...e mi restituiva l'errore che ti ho postato......poi ho cambiato un pò il codice e comunque non era adatto a ciò che realmente volevo......
Comunque ho risolto con questo codice:

Dim strBuilder As New System.Text.StringBuilder
strBuilder.Append("ID IN (")
For Each item As String In ListBox1.Items
strBuilder.Append(item.ToString & ", ")
End If
Next
strBuilder.Remove(strBuilder.Length - 2, 2)
strBuilder.Append(")")
Debug.WriteLine(strBuilder.ToString)
mioBindingSource.RemoveFilter()
mioBindingSource.Filter = strBuilder.ToString


Grazie comunque per l'aiuto ed i consigli che mi hai fornito......Un saluto a presto.
Mark....
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5