GridView’de alfabetik sayfalama

Datagrid, GridView kontrollerde sayfalama yaparken default olarak Numeric veya NextPrevious modları sunulur. Bununla beraber bu kontroller, özel bir sayfalama şekli oluşturmamıza da izin vermektedir. Bu yazıda özellikle cari hesap kartlarının, üyelerin listelendiği sayfalarda desktop uygulamalarından kalma bir alışkanlık olan alfabetik sıralamanın nasıl yapılacağını göreceğiz.
Burada, GridView’in kendi PageIndexChanged eventini kullanmak yerine RowCreated eventini kullanarak edip kontrolün Footer satırını handle edeceğiz. Ve bu satıra da alfabetik olarak harfleri sıralayacağız. Öncelikle sayfaya bir tane GridView kontrolü taşıyalım.

Şimdi bunun databind edilmesini sağlayalım.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            GridviewDataBind("A");
    }//Page_Load

    void GridviewDataBind(string Harf) {
        string CnnStr = @"Integrated Security=SSPI;User ID=sa;Initial Catalog=MyDatabase;Data Source=AKAYMAZ";
        SqlConnection Cnn = new SqlConnection(CnnStr);
        string SqlQuery ="SELECT FullName AdSoyad FROM Users WHERE FullName LIKE '"+ Harf +"%' ORDER BY FullName";
        SqlCommand Cmd = new SqlCommand(SqlQuery,Cnn);
        Cnn.Open();
        SqlDataReader Dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
        GridView1.DataSource = Dr;
        GridView1.DataBind();
    }//GridviewDataBind

GridView’in alt alanında tıklanmak üzere alfabeyi oluşturacağız. Bunun için kontrolün RowCreated eventini yakalayacağız. Bu event içerisinde yaratılan item’in Footer olduğundan emin olduktan sonra döngüyle tüm harfleri bastıracağız. Bu harflerin tıklanabilir veya sunucu tarafında bir değer gönderebilmesi için salt metin olarak LinkButton olarak oluşturmamız gerekir.
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Footer) {
e.Row.Cells.Clear();
TableCell Tc = new TableCell();
e.Row.Cells.Add(Tc);
LinkButton Lbtn;
for (byte X = 65; X
Bu işlemleri yaptıktan sonra aşağıdaki görüntüyü elde etmiş oluruz.

Yapılan işlemlerin VB.NET kodunu da aşağıdaki tabloda bulabilirsiniz;

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If (Not IsPostBack) Then
        GridviewDataBind("A")
    End If
End Sub 'Page_Load

Private Sub GridviewDataBind(ByVal Harf As String)
    Dim CnnStr As String = "Integrated Security=SSPI;User ID=sa;Initial Catalog=sec;Data Source=AHMETA\AKAYMAZ"
    Dim Cnn As SqlConnection = New SqlConnection(CnnStr)
    Dim SqlQuery As String = "SELECT FullName AdSoyad FROM Users WHERE StFullName LIKE '" & Harf & "%' ORDER BY FullName"
    Dim Cmd As SqlCommand = New SqlCommand(SqlQuery, Cnn)
    Cnn.Open()
    Dim Dr As SqlDataReader = Cmd.ExecuteReader(CommandBehavior.CloseConnection)
    GridView1.DataSource = Dr
    GridView1.DataBind()
End Sub 'GridviewDataBind

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
    If e.CommandName = "HarfGonder" Then
        GridviewDataBind(e.CommandArgument.ToString())
    End If
End Sub 'GridView1_RowCommand

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
    If e.Row.RowType = DataControlRowType.Footer Then
        e.Row.Cells.Clear()
        Dim Tc As TableCell = New TableCell()
        e.Row.Cells.Add(Tc)
        Dim Lbtn As LinkButton
        For X As Byte = 65 To 90
            Lbtn = New LinkButton()
            Lbtn.Text = Convert.ToChar(X).ToString()
            Lbtn.CommandName = "HarfGonder"
            Lbtn.CommandArgument = Convert.ToChar(X).ToString()
            Tc.Controls.Add(Lbtn)
            Tc.Controls.Add(New LiteralControl(" "))
        Next X
    End If
End Sub 'GridView1_RowCreated

GridView’de alfabetik sayfalama” üzerine bir düşünce

  1. Ahmet Kaymaz Yazar

    Şu an için en basit olarak aklıma şu yöntem geliyor. Türkçe alfabelerini dizinin elemanı olarak listeleyebiliriz.
    string alfabe = "ABCÇDEFGĞHIİJKLMNOÖPQRSŞTUÜVWXYZ";
    foreach (char harf in alfabe)
    {
    //ara işlemler
    }

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.