GridView'içinde kelime arama Örnek



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 &nbsp;<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 />&nbsp;

 

        <asp:Panel ID="Panel1" runat="server" Height="100%" Width="400">

        </asp:Panel>

 

        <br />

        <br />

        <br />&nbsp;

 

    </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>";

    }

}

 



Puan Ver

 
 

Yorum yapmak istiyorum





Yapılan Yorumlar


Yorum Tarihi Yapılan Yorum
1/7/2008 9:51:33 PM this is very nice code. Thanks