TopperMedlem sedan apr. 200531 inlägg Hej!
Jag skulle vilja ha hjälp med att fixa en kod till en sökfunktion.
Jag har en databaskoppling och databasens innehåll visas i en datagrid, men jag skulle nu vilja ha en enkel sökmotor som söker igenom databasen.
Varje gång sidan laddas vill jag att datagriden ska visa allt innehåll i databasen sedan när man har sökt så ska sökresultatet komma upp istället.
Någon som kan hjälpa mig med detta?
MVH
/ Kalle Anka
jazzilMedlem sedan maj 2003151 inlägg Jag skrev precis denna sql string ..
"SELECT tbl_artiklar.id AS art_id, tbl_artiklar.art_namn,
tbl_artiklar.art_artnr, tbl_artiklar.art_desc,
tbl_artiklar.art_kat, tbl_artiklar.art_tilv,
tbl_artiklar.art_bild, tbl_artiklar.art_pris,
tbl_leverantorer.tilv_namn, tbl_kategorier.kat_namn,
tbl_kategorier.id FROM ( tbl_artiklar LEFT JOIN
tbl_leverantorer ON tbl_artiklar.art_tilv = tbl_leverantorer.id ) LEFT JOIN tbl_kategorier ON
tbl_artiklar.art_kat = tbl_kategorier.id WHERE
tbl_artiklar.art_namn LIKE \"%"+SearchBox.Text+"%\" OR
tbl_artiklar.art_desc LIKE \"%"+SearchBox.Text+"%\" OR
tbl_leverantorer.tilv_namn LIKE
\"%"+SearchBox.Text+"%\" OR tbl_kategorier.kat_namn
LIKE \"%"+SearchBox.Text+"%\""
Sen använder du bara en OleDbDataAdapter så får du ut
och fyller en DataSet och binder den till din DataGrid så ska det nog funka ...
Lite mer exempel
OleDbConnection olCon = new OleDbConnection(ConnectionString);
OleDbDataAdapter olData = new OleDbDataAdapter(SQLQUERY, olCon);
DataSet ds = new DataSet();
olData.Fill(ds);
olCon.Close();
DataGrid dGrid = new DataGrid();
dGrid.DataSource = ds;
dGrid.DataBind();
Taget direkt ut huvvet så jag vet inte hur det funkar i praktiken ;)
Förenklad SQL Query
SELECT * FROM tabell WHERE column_varduvillsokai LIKE "%SÖK VÄRDE%"
TopperMedlem sedan apr. 200531 inlägg Okej, tack så mycket.
Men nu är det så att jag är ganska ny inom området. Så jag undrar om det finns någon som vill hjälp mig lite mer, så jag förstår...typ väldigt mycket.
Jag har en access databas...
den övre koden är ju en SQL fråga... och den nedre som Jazzil skriver är vad jag förstå en Object öppning... ungefär som vilken programmering som hellst. http://webeye.nu har bra artiklar tycker jag personligen inom ASP sen finns asp.net också(Är själv rätt ny inom .net området)
TopperMedlem sedan apr. 200531 inlägg Okej.
Det är ASP.NET som gäller...
Ingen annan som kan hjälpa mera?
Har ju en fungerande datagrid och allt sånt klart....kan väl inte vara så svårt?
jazzilMedlem sedan maj 2003151 inlägg Om du kan ge lite kod så kanske vi kan bygga på den .. det är enklare så :)
TopperMedlem sedan apr. 200531 inlägg Okej här kommer det....
<%@ Page Language="VB" Debug="true" Culture="sv-se" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.oledb" %>
<script runat="server">
protected strSQL As String = "SELECT ett,två, tre, fyra," & _
"FROM Tabell"
Sub Page_Load(Source As Object, E As EventArgs)
If Not Page.IsPostBack Then
lblSQL.text= strSQL
BindData()
End If
End Sub
Sub BindData()
Dim ds As New DataSet
Dim da As oledbDataAdapter
Dim strConn as string = ("Provider=" & _
"Microsoft.Jet.OLEDB.4.0;" & _
"Data source=" & server.mappath("databas.mdb"))
da = New oledbDataAdapter(lblSQL.text, strConn)
da.Fill(ds, "Tabell")
myDataGrid.DataSource = ds.Tables("Tabell")
myDataGrid.DataBind()
End Sub
Sub Paging_Click(Source As Object, E As DataGridPageChangedEventArgs)
myDataGrid.CurrentPageIndex = E.NewPageIndex
BindData()
End Sub
Sub Sorting_Click(Source As Object, E As DataGridSortCommandEventArgs)
lblSQL.text = strSQL & " ORDER BY " & E.SortExpression
BindData()
End Sub
Sub myDataGrid_SelectedIndexChanged(sender As Object, e As EventArgs)
End Sub
</script>
<html>
<head>
<title></title>
</head>
<body leftmargin="30" topmargin="30">
<form method="post" runat="server">
<p>
</p>
<table cellspacing="0" cellpadding="0" width="889">
<tbody>
<tr>
<td valign="top" width="1">
</td>
<td valign="top" width="700">
<p>
<br />
<br />
</p>
<table cellspacing="0" width="700" border="0">
<tbody>
<tr>
<td width="700" height="0">
<br />
<p>
</p>
<p>
Sökord
<asp:TextBox id="Form1" runat="server"></asp:TextBox>
<asp:Button id="Button1" runat="server" Text="Sök"></asp:Button>
<br />
<br />
</p>
<p>
<br />
<br />
</p>
</td>
</tr>
<tr>
<td valign="top" colspan="0" rowspan="0" border="0">
</td>
</tr>
<tr>
<td valign="top">
<asp:Label id="lblSQL" runat="server" visible="False"></asp:Label>
<asp:Datagrid id="myDataGrid" runat="server" Font-Size="10pt" Font-Name="Verdana" Border="0" Cellpadding="4" CssClass="DataGrid" HeaderStyle-Font-Bold="True" AllowSorting="True" OnSortCommand="Sorting_Click" AllowPaging="True" OnPageIndexChanged="Paging_Click" PagerStyle-Mode="NumericPages" PagerStyle-HorizontalAlign="Right" Width="700px" OnSelectedIndexChanged="myDataGrid_SelectedIndexChanged">
<AlternatingItemStyle backcolor="#ffffff"></AlternatingItemStyle>
<HeaderStyle font-bold="True" forecolor="Black"></HeaderStyle>
<PagerStyle horizontalalign="Right" mode="NumericPages"></PagerStyle>
</asp:Datagrid>
</td>
</tr>
</tbody>
</table>
<p align="right">
</p>
</td>
<td valign="bottom" width="1">
</td>
<td valign="top" width="178">
<br />
<br />
<br />
<br />
</td>
</tr>
<p>
</p>
</tbody>
</table>
<p>
</p>
</form>
</body>
</html>
jazzilMedlem sedan maj 2003151 inlägg Nu är jag ingen ninja på vb men here goes.
Ändrad/Ny kod är i Bold
<%@ Page Language="VB" Debug="true" Culture="sv-se" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.oledb" %>
<script runat="server">
protected strSQL As String = "SELECT ett,två, tre, fyra," & _
"FROM Tabell"
Sub Page_Load(Source As Object, E As EventArgs)
If Not Page.IsPostBack Then
lblSQL.text= strSQL
BindData()
End If
End Sub
[B]Sub sokFunc(sender As Object, E As EventArgs)
Dim searchQuery As String = "SELECT * FROM tabell WHERE columattletai LIKE '%"& Form1.Text &"%'"
lblSQL.text = searchQuery;
BindData()
End Sub [/B]
Sub BindData()
Dim ds As New DataSet
Dim da As oledbDataAdapter
Dim strConn as string = ("Provider=" & _
"Microsoft.Jet.OLEDB.4.0;" & _
"Data source=" & server.mappath("databas.mdb"))
da = New oledbDataAdapter(lblSQL.text, strConn)
da.Fill(ds, "Tabell")
myDataGrid.DataSource = ds.Tables("Tabell")
myDataGrid.DataBind()
End Sub
Sub Paging_Click(Source As Object, E As DataGridPageChangedEventArgs)
myDataGrid.CurrentPageIndex = E.NewPageIndex
BindData()
End Sub
Sub Sorting_Click(Source As Object, E As DataGridSortCommandEventArgs)
lblSQL.text = strSQL & " ORDER BY " & E.SortExpression
BindData()
End Sub
Sub myDataGrid_SelectedIndexChanged(sender As Object, e As EventArgs)
End Sub
</script>
<html>
<head>
<title></title>
</head>
<body leftmargin="30" topmargin="30">
<form method="post" runat="server">
<p>
</p>
<table cellspacing="0" cellpadding="0" width="889">
<tbody>
<tr>
<td valign="top" width="1">
</td>
<td valign="top" width="700">
<p>
<br />
<br />
</p>
<table cellspacing="0" width="700" border="0">
<tbody>
<tr>
<td width="700" height="0">
<br />
<p>
</p>
<p>
Sökord
<asp:TextBox id="Form1" runat="server"></asp:TextBox>
<asp:Button id="Button1" runat="server" [B]OnClick="sokFunc"[/B] Text="Sök"></asp:Button>
<br />
<br />
</p>
<p>
<br />
<br />
</p>
</td>
</tr>
<tr>
<td valign="top" colspan="0" rowspan="0" border="0">
</td>
</tr>
<tr>
<td valign="top">
<asp:Label id="lblSQL" runat="server" visible="False">[...]
TopperMedlem sedan apr. 200531 inlägg KANON! Tack så mycket!!
Bara ett litet, litet problem...
Vi kan bara söka i en kolumn i taget, hur gör man för att ändra detta?
Vi vill att sökordet ska söka igenom fem kolumner....
TACK IGEN!
jazzilMedlem sedan maj 2003151 inlägg Ändra om sql till:
"SELECT * FROM tabell WHERE columattletai LIKE '%"& Form1.Text &"%' OR columntvåattletai LIKE '%"& Form1.Text &"%' OR columntreattletai LIKE '%"& Form1.Text &"%'"
Osv..
Glömm inte att markera frågan besvarad ;)
JosefMedlem sedan mars 20023 561 inlägg Topper: Det går jättebra att redigera inlägg istället för att posta ett nytt inlägg med såpass mycket innehåll, där dessutom nästan allt är samma som tidigare inlägg.
jazzil: Ett tips är att skaffa en bok för att få en överblick över sådana här ganska grundläggande saker. Eller kolla upp artiklar, dokumentation på nätet.
jazzilMedlem sedan maj 2003151 inlägg
Josef skrev:
Topper: Det går jättebra att redigera inlägg istället för att posta ett nytt inlägg med såpass mycket innehåll, där dessutom nästan allt är samma som tidigare inlägg.
jazzil: Ett tips är att skaffa en bok för att få en överblick över sådana här ganska grundläggande saker. Eller kolla upp artiklar, dokumentation på nätet.
va? .. Jag har inget emot kritik men jag försår inte riktigt vad du menar.
TopperMedlem sedan apr. 200531 inlägg Jazzil, tusen tack...det löste sig!
Tack!!
Fattar inte heller va Josef menar...
Tack igen
JosefMedlem sedan mars 20023 561 inlägg Ojdå! Sorry jazzil, förväxlade er. :r
En annan grej, det är det inlägget som löste problemet som ska markeras inte det senaste.
TopperMedlem sedan apr. 200531 inlägg Hej!
Sökmotorn fungerar som den ska men det är en liten bugg.
I min datagrid väljer jag att bara visa 10 poster på varje sida, och när jag går vidare till "sida" 2 och försöker söka där så går det inte.
Vad är det som är fel?
Förstår mig inte alls på varför det blir fel när man inte är på "sida" 1.
jazzilMedlem sedan maj 2003151 inlägg Ska du visa en andra sida av sökreslutaten eller ska du söka från sida 2?
TopperMedlem sedan apr. 200531 inlägg Söka från sidan 2.
Visa andra sidan fungerar...som det ska.
En fråga! Om hela databasen redan är inladdad i en DataGrid varför röra databasen?
Varför inte söka i DataGriden då? Kommer att gå mycket fortare eftersom den redan ligger i minnet.
TopperMedlem sedan apr. 200531 inlägg OKej, men hur fungerar det?
Sökmotorn fungerar ju bra, bara att det inte går att söka på första sidan...