Archief - ASP.NET: Gridview filteren met sql query ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

NoFate

Legacy Member
Hallo

Ik heb een gridview op mijn aspx pagina
Ik heb deze heel simpel gemaakt met een sqldatasource
bv : select * from tabel

Maar nu wou ik een filter toepassen

Dus dan heb ik een textbox bijgemaakt
Mijn sql query wordt dan bv :
select * from tabel where (naam like '%' + @naam + '%' OR comment like '%' + @comment + '%')

Nu dit gaat goed , maar er wordt via deze manier maar in kolom gezocht...

Stel dat in kolom naam : "NoFate" zit , en in kolom comment : "test" zit
En ik zoek op : "NoFate test" , dan krijg ik natuurlijk geen resultaten

Ook als er meerdere woorden worden meegegeven die niet op dezelfde manier in het record zitten , dan vindt hij ook niets

bv in kolom naam zit : "NoFate test"
Ik vul in in mijn textbox : "test NoFate"
dan krijg ik ook geen resultaten...


Hoe kan ik dit oplossen?

orez

Legacy Member
wildcards gebruiken hé in uw SQL Query. en uw SQL Query dynamisch laten opbouwen aan de hand van uw ingegeven waarden, dus uw 2 woorden laten splitsen zien hoeveel woorden ge hebt, en dan uw SQL comment opbouwen aan de hand van uw aantal woorden.

Dan krijgde meer iets a la

naam LIKE % part1 % OR naam LIKE % part 2 % OR comment like % ......

get the point? :)

NoFate

Legacy Member
Ik gebruik toch wildcards?

Maar hoe kan ik dan die waardes laten splitsen?
En hoe kan ik die query dynamisch laten opbouwen? want ik geef deze in in een sqldatasource component via vb.net?


thnx

orez

Legacy Member
String.Split
iteraties gebruiken...

Simpele programmeer toestanden? En trouwens % tekens worden enkel gebruikt voor data, voor strings ben je beter aangewezen op : * ?

NoFate

Legacy Member
mja , ik maak nu gebruik van een sqldatasource component.

Ik weet wel hoe ik een strin moet splitten enzo. Maar mijn query moet dan toch dynamisch worden opgebouwd? Of hoe verwezenlijk je dat just in vb.net?

Dit is nu mijn code

Code:
 </asp:SqlDataSource><asp:SqlDataSource ID="filter" runat="server"
        ConnectionString="<%$ ConnectionStrings:categoriesDatasource %>" SelectCommand="SELECT * From document where  (naam like '%' + @naam + '%' or  comment like '%' + @comment+ '%')" CancelSelectOnNullParameter="False">
        <SelectParameters>

deze code zit dus achter mijn sqldatasouce waarmee mijn gridview is gelink

De velden @naam en @comment zijn dus gelinkt met een textbox

Boddah

Legacy Member
en hoe verwezenlijk je dit als je met stored procedures werkt?

Cakeman

Legacy Member
Boddah zei:
en hoe verwezenlijk je dit als je met stored procedures werkt?
Je kan aan je stored procedure een filterstring als parameter meegeven.

Op het werk gebruiken we die methode toch.

NoFate

Legacy Member
Hallo
Ik heb een mogelijke goede oplossing gevonden voor mijn probleem.

Dit is momenteem mijn asp.net code :
Code:
  </asp:SqlDataSource><asp:SqlDataSource ID="documentsfilter" runat="server"
        ConnectionString="<%$ ConnectionStrings:documents %>" SelectCommand="SELECT * from documents where naam like '%' + @naam + '%'" CancelSelectOnNullParameter="False">
        <SelectParameters>
            <asp:ControlParameter ControlID="txtSearch" Name="naam" PropertyName="Text" />
        </SelectParameters>
    </asp:SqlDataSource>

Dus in mijn txtsearch texbox geef ik een string mee:
bv : "dit is een test"
Als ik deze string omvorm naar : "dit%is%een%test" dan zoekt hij wel op alle kernwoorden...

Dus eigenlijk moet ik in bovenstaande stukje code erges een REPLACE functie toepassen.
Maar ik weet dus niet hoe en waar...

Bedankt voor julle hulp

servi

Legacy Member
:offtopic: bouw uw connectionString eens niet zo op, nu ben je kwetsbaar voor sql-injection. In JSP en ASP.net moet je altijd gebruik maken van parameters in plaats van zomaar daar een string te zetten.

en de plaats waar ge uw code moet plaatsen om de goede query te doen is in uwen codebehind-pagina ( aspx.cs als ge c-scherp gebruikt of aspx.vb als vb.net gebruikt )

NoFate

Legacy Member
mja , deze website is bedoeld voor hier intern te gebruiken met een aantal users.
Ik heb deze site snel in mekaar geflatst met VB.NET , hij maakt dit allemaal zo aan.
Veel maakt in dit geval de secutity niet uit...

Weet je niet hoe ik bovenstaand probleem kan verwezenlijken?

NoFate

Legacy Member
Boddah zei:
textbox1.Text.Replace(" ", "%");

en pas dat eens toe in deze code?

Code:
  </asp:SqlDataSource><asp:SqlDataSource ID="documentsfilter" runat="server"
        ConnectionString="<%$ ConnectionStrings:documents %>" SelectCommand="SELECT * from documents where naam like '%' + @naam + '%'" CancelSelectOnNullParameter="False">
        <SelectParameters>
            <asp:ControlParameter ControlID="txtSearch" Name="naam" PropertyName="Text" />
        </SelectParameters>
    </asp:SqlDataSource>

servi

Legacy Member
*zucht*


en de plaats waar ge uw code moet plaatsen om de goede query te doen is in uwen codebehind-pagina ( aspx.cs als ge c-scherp gebruikt of aspx.vb als vb.net gebruikt )

Boddah

Legacy Member
die code kun je, met andere woorden, enkel in de codebehind van je aspx pagina doen ;)

en zet je selectcommand ook in de codebehind.

NoFate

Legacy Member
Mja , gelijk ik al gezegd heb , ik heb dit allemaal in Visual studio gemaakt , hij maakt deze code zo als ik de componenten sleep naar mijn pagina.

Wat moet ik dan net veranderen om deze code in mijn .vb pagina te zetten?

thnx

Talos

Legacy Member
Niet alles gelezen maar:
Connectionstrings horen thuis op 1 plaats: web.config
Code (zoals reeds vermeld): in codebehind-page
En voor die filter: kijk keer naar dataviews en rowfilters.

Precies veel mensen hier die raad komen geven en toch niets of weinig afweten van asp.net.

Kazantia

Legacy Member
de code behind kan je instellen in je vwd
als je een nieuwe aspx pagina maakt moet je aanvinken "place code in a seperate file"

dan komt alle execute code voor events ed in een apparte file te staan net onder je .aspx file

vb
maak nieuw test.aspx bestand aan en vink deze optie aan
dan zal je zien dat onder je test.aspx een bestand test.aspx.vb of test.aspx.cs komt te staan

zet de kode er in op het event testbox.textchanged
zodoende word je textbox on the fly veranderd.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan