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
Türkçe karakterler ne olacak ?
Ş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
}