Default.aspx sayfası
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView'içinde kelime arama</title>
<style type="text/css">
.highlight
{
background:Yellow;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
Araştır <asp:TextBox ID="txtArastir" runat="server" />
<asp:Button ID="Btn_Arastir"
OnClick="Btn_Arastir_Click"
runat="server"
Text=" Bul " />
<br />
<br />
<br />
<asp:GridView ID="GridView1"
runat="server"
AutoGenerateColumns="false"
AllowPaging="True"
Font-Size="Large"
PageSize="10">
<Columns>
<asp:TemplateField HeaderText="Product Name">
<ItemTemplate>
<asp:Label ID="lblProductName"
runat="server"
Text = '<%# ArastirKeyWord( ArastirWord,(string) Eval("ProductName"))%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Panel ID="Panel1" runat="server" Height="100%" Width="400">
</asp:Panel>
<br />
<br />
<br />
</div>
</form>
</body>
</html>
Default.aspc.cs sayfası
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
public partial class _Default : System.Web.UI.Page
{
protected string ArastirWord = String.Empty;
private const int PAGE_SIZE = 10;
private Hashtable hMatches = new Hashtable();
/*
Page_Load() sayfa ilk yüklendiğinde çalıştırılmasını istediğimiz kod ve
metodları tanımladığımız yerdir*/
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindData();
}
LinkOlustur();
}
private string ConnectionString
{
get { return "Server=localhost;Database=Northwind;Trusted_Connection=true"; }
}
/*
BindData() Metodu ile veritabanından aldığımız verileri GridView'e bağlıyoruz.*/
private void BindData()
{
SqlConnection sqlConn = new SqlConnection(ConnectionString);
String strSql = "SELECT ProductID, ProductName FROM Products";
SqlDataAdapter ad = new SqlDataAdapter(strSql, sqlConn);
DataSet ds = new DataSet();
ad.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
/*
Girdiğimiz kiritere göre sorgulama metodlarını tetikleyen Button kontrolümüz. */
protected void Btn_Arastir_Click(object sender, EventArgs e)
{
/* Panel kontrolünü ilk kullanıma hazırlamak için ayarlıyoruz.*/
Panel1.Controls.Clear();
Panel1.DataBind();
/* TextBox'a girdiğimiz karekterleri ArastirWord değişkenimiz ile
ArastirContainer Metodumuza gönderiyorz. */
ArastirWord = txtArastir.Text;
ArastirContainer(ArastirWord);
}
/*
LinkOlustur() Metodu ile txtSorgula TextBox'ına girdiğimiz karekterlerin
GridView'in hangi sayfasında ve kaç adet olduğunu tespit ediyor ve
oluşturduğumuz LinkButton'lara bağlıyoruz.*/
private void LinkOlustur()
{
Hashtable myHashTable = ViewState["MyHashTable"] as Hashtable;
if(myHashTable != null && myHashTable.Count > 0)
{
foreach (object key in new ArrayList(myHashTable.Keys))
{
LinkButton link = new LinkButton();
link.Command += new CommandEventHandler(link_Command);
link.CommandArgument = key.ToString();
link.Text = String.Format(" {0}. Sayfada {1} Adet var.",
(Convert.ToInt32(key) + 1).ToString(),
myHashTable[key].ToString()) + "<BR>";
Panel1.Controls.Add(link);
}
Panel1.DataBind();
}
}
/*
Bu metodla txtArastir'a girdiğimiz kelimelerin formatını ayarlıyor ve
GridView'in içinde bulunanlarının rengini sarı olarak işaretliyoruz. */
protected string ArastirKeyWord(string ArastirString, string text)
{
Regex reg = new Regex(ArastirString.Replace(" ", "|"), RegexOptions.IgnoreCase);
return reg.Replace(text,new MatchEvaluator(ReplaceKeyWords));
}
/*
Bu metodu araştırdımız karekterlerin hangi sayfada kaç adet olduğunu
bulmak için kullanıyoruz.*/
private void ArastirContainer(string ArastirString)
{
int index = 0;
double pageIndex = 0;
DataSet ds = GetDataSet();
Regex reg = new Regex(ArastirString.Replace(" ","|"),RegexOptions.IgnoreCase);
foreach(DataRow row in ds.Tables[0].Rows)
{
if (reg.IsMatch(row["ProductName"] as String))
{
pageIndex = Math.Ceiling( Convert.ToDouble( index / PAGE_SIZE ));
if (hMatches.ContainsKey(pageIndex))
{
hMatches[pageIndex] = ((int)hMatches[pageIndex]) + 1;
}
else
{
hMatches.Add(pageIndex, 1);
}
}
index++;
}
/* Bulunan kayıt sayısını LinkButton'a aktarabilmek için ViewState'ye yazıyoruz. */
ViewState["MyHashTable"] = hMatches;
LinkOlustur();
}
/*
Bu metodla bulduğumuz kayıtların GridView'in hangi sayfasında olduğunu tespit ediyoruz.*/
void link_Command(object sender, CommandEventArgs e)
{
GridView1.PageIndex = Convert.ToInt32( e.CommandArgument);
ArastirWord = txtArastir.Text;
BindData();
}
/*
Bu metodu aradımız kayıtların veritabanında kaç adet oldugunu bulmak için kullanıyoruz.*/
private DataSet GetDataSet()
{
SqlConnection sqlConn = new SqlConnection(ConnectionString);
String strSql ="SELECT ProductID, ProductName FROM Products";
SqlDataAdapter ad = new SqlDataAdapter(strSql, sqlConn);
DataSet ds = new DataSet();
ad.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
return ds;
}
/*
Bu metod ArastirKeyWord'un yardımcı metodudur. Araştırma sonucu
GridView'in içinde bulunan kayıtların rengini sarı olarak ayarlıyor. */
private string ReplaceKeyWords(Match m)
{
return "<span class='highlight'>" + m.Value + "</span>";
}
}