SİTE
İÇİ ARAMA |
|
Blogroll |
|
|
|
ASP.NET Repeater Kontrolü |
|
Gönderiliyor lütfen bekleyin... |
|
|
Nerdeyse tüm ASPNET
kontrollerine veri bağlamak mümkün iken bu iş için özelleşmiş üç ana kontrol
vardır. Bunlar: sizinde bildiğiniz gibi DataGrid, DataList ve Repeater kontrolleridir.
Bugün Repeater kontrolünü kullanmayı inceleceğiz.
Yukarıdaki üçlünün
arasında DataGrid en yeteneklisidir. Repeater kontrolü ise en az yeteneklisidir.
DataList, yetenek olarak ikisinin ortasında kalıyor. Burda birkaç konuya dikkatinizi
çekmek isterim. Kontrolün yeteneği artıkça onu kullanmak da daha karmaşık hale
geliyor. Ayrıca kontrole kendimize özel bir biçim uygulama da zorlaşıyor. Diğer
bir değişle en esnek veri bağlama kontrolü Repeater kontrolüdür.
Repeater kontrolünün
diğer ikisinden daha esnek olması onun sadeliği ve DataGrid’ in veriyi
tablo içerisinde görüntülemeyi tercih etmesindendir. Ayrıca Repeater kontrülünün
içine istediğimiz HTML taglarını ekleyebiliriz. Yani Repeater kontrolünde tablolara
bağımlı değiliz.
Repeater kontrolünü
etkin bir biçimde kullanmanın yolu, kontrolün içindeki bölümler için şablonları
kullanmaktan geçer. Çünkü bu kontrolün varsayılan bir görünümü yoktur. Repeater
kontrolünde beş farklı şablon (Template) kullanabiliriz. Şablonlardan olmazsa
olmazı tabii ki de ItemTemplate’ dir. ItemTemplate şablonu
bir veri kaynağından gelen verinin her bir kaydını nasıl görüntüleyeceğimizi
belirlemek için kullanılır. Zaten o olmazsa hiçbir şeyi görüntüleme şansımız
yoktur.
Diğer şablonlara
geçmeden önce Repeater kontrolünün en basit kullanımını görmek için bir örnek
yapalım. Bunun için sizin bir tane ASP.NET projesi açtığınızı varsayıyorum.
Sonra bu uygulmaya Ornek1.aspx isimli bir web formu ekleyelim. Formumuzun html
kodunu aşağıdaki gibi olacak şeklide değiştirelim:
<%@
Page language="c#" Codebehind="Ornek1.aspx.cs" AutoEventWireup="false"
Inherits="RepeaterKontrolu.Ornek1" %>
<HTML>
<HEAD>
<title>Repeater
Ornek1</title>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form
id="Form1" method="post" runat="server">
<asp:Repeater
id="Repeater1" runat="server">
<ItemTemplate>
<b>Şirket:
</b> <%# DataBinder.Eval(Container.DataItem, "CompanyName") %>
<br>
<b>İlgili
kişi: </b> <%# DataBinder.Eval(Container.DataItem, "ContactName")
%>
<br>
<b>Şehir:
</b> <%# DataBinder.Eval(Container.DataItem, "City") %>
<br>
<br>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</HTML>
|
Ornek1.aspx
Yukarıdaki sayfamızın
html kodunda kırmızı renkli olan kısımlar Repeater kontrolümüz ile ilgilidir.
Dikkat ederseniz Repeater1 isimli kontrolümüzü içindeki item template
şablonumuzda bir takım kodlar bulunmaktadır. Burda veri kaynağından gelen her
bir kaydın CompanyName,
ContactName ve City alanlarını
görüntülemek istiyoruz. Normal html kodunun içinde herhangi bir yerde veriyi
görüntülemek için <%# Veri %> şeklinde bir yapı kullanmamız
mümkündür. Ancak burda özel bir durum olduğu için <%# DataBinder.Eval(Container.DataItem,
"KolunIsmi") %> gibi bir yöntem kullanıyoruz.
Şimdi
istersenizin örneğimizin arka planda çalışacak kodunu inceleyelim:
using
System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace RepeaterKontrolu{
public class Ornek1 : System.Web.UI.Page
{
protected
System.Web.UI.WebControls.Repeater Repeater1;
private
void Page_Load(object sender, System.EventArgs e)
{
//
Sayfa ilk yüklendiğinde Veritabanından veriyi
getiren metodu çağıralım:
this.VeriGetir();
}
public
void VeriGetir()
{
//
Önce bir bağlantı nesnesi oluşturalım.
//
Bağlantı nesnesinin yapılandırıcısına bağlantı cümlemizi yazıyoruz:
OleDbConnection
objConn = new OleDbConnection("Data Source=C:\\Northwind.mdb;
Provider=Microsoft.Jet.OLEDB.4.0;");
//
Çalıştıracağımız komutu oluşturalım.
//
Komutunda yapılandırıcısına da SQL sorgumuzu eklemeyi unutmuyoruz:
OleDbCommand
objCmd = new OleDbCommand("SELECT Customers.CompanyName, Customers.ContactName,
Customers.City FROM Customers;");
//
Bağlantımızı ile komutumuzu ilişkilendirelim:
objCmd.Connection
= objConn;
//
Bir veri adaptörü oluşturalım:
OleDbDataAdapter
objDataAdapter = new OleDbDataAdapter(objCmd);
//
Bir tane veri tablosu oluşturalım.
//
Genelde örneklerde DataSet oluşturulur ama biz birden fazla
//
veri kümesi beklemediğimiz için DataSet e ihtiyacımız yok!
DataTable
objDt = new DataTable();
//
bağlantmızı açalım:
objConn.Open();
//
veri tablomuzu adaptör yardımı ile dolduralım:
objDataAdapter.Fill(objDt);
//
bağlantıyı kapatalım:
objConn.Close();
//
Repeater nesnemize veri kaynağını gösterelim:
Repeater1.DataSource
= objDt;
//
Veriyi Repeater nesnemize bağlayayalım:
Repeater1.DataBind();
}
}
}
|
Ornek1.aspx.cs
Yukarıdaki kodu
açıklamadan önce sayfamızın aşağıdaki gibi bir sonuç göstermesi gerektiğni belirtelim.
Aslında kodu biraz ADO.NET ile ilgilenmiş arkadaşların kolayca anlayacağını
tahmin ediyorum. Yine de isterseniz üstünden bir geçelim. Sayafanın ilk yüklendiğinde
çağrılan metod (Page_Load) içinde VeriGetir() isimli metodu çağırıyoruz. Peki
VeriGetir() metodu ne yapıyor ona bir bakalım isterseniz. Bu
metodun amacı içinde Ms Access veritabanı formatında olan Northwind’ den müşteriler
tablosundaki 3 alanı getirmek ve sonucu Repeater1 kontrolümüze bağlamaktır.
Bu amacımza ulaşmak için önce veritabanı ile olan bağlantıyı kurmak için
objConn isimli
bir bağlantı nesnesi oluşturuyoruz. Bağlantı nesnemizin yapılandırıcısına bağlatı
için gerekli cümleyi yazıyoruz. Bir sonraki adımda veritabanından almak istedğimiz
veri için bir komut, objCmd,
nesnesi oluşturuyoruz. Komut nesnemizin yapılandırıcısına
ise gerekli SQL sorgu cümlemizi yazarken hemen altaki satırda bu komutu çalıştırırken
kullancağımız bağlantıyı bildiriyoruz.
DataSet
ve DataTable döndermek için DataAdapter kullanmak zorundayız. Bizde kendi DataAdapter
nesnemizi, ismi tahmin edeceğiniz gibi objDataAdapter, oluşturuken
bu nesnenin kullanacağı komut nesnesini de hemen yapılandırıcıya atıyoruz. Sonra
bağlantıyı açıp, objDataTable’ ımızı doldurup tekrar bağlantıyı
kapatıyoruz. Artık istedğimiz verileri veri tablosundan aldık. Onları Repeater1
adını verdiğimiz kontrol ile ilişkilendirmek gerekiyor. Bunun için Repeater1.DataSource
= objDataTable dedikten sonra veriyi bağlamak için Repeater1.DataBind();
yazmamız
yeterlidir. Artık bir aksilik olmazsa istedğimiz verileri Repeater1’ de gösteriyor
olacağız.
Makalemizin başında
da söyledğimiz gibi 5 farklı adet şablonu Repeater kontrollerine uygulayabiliriz.
Bu şablonlar:
ItemTemplate |
Yukarıdadaki
örneğimizde kulladığımız bu şablon veritabanından gelen her bir satır veriyi
nasıl görüntülemek istediğimizi belirlemek için kullanılır. |
AlternatingItemTemplate
|
Art
arda gelen veri satırlarının birinin diğerinden farklı olması için kullanılır.
Bu sayede verilerin okunması kolaylaşır. |
HeaderTemplate |
Repeater
kontrolünün verileri alt alta yazmasından önce sadece en üstte bir defa
görünen başlık içindir. |
FooterTemplate |
Repeater’ın
en altında yine sadece bir defa görünen altlık diyebileceğimiz kısmın şablonudur. |
SeperatorTemplate |
Veritabanından
gelen her bir satırı diğerinden ayırmak için kullanılabilir. Mesela bir
yatay çizgi (<hr>) gibi. |
İsterseniz şablonları
Repeater kontrolümüzde nasıl kullanacağımıza dair daha gelişmiş bir örnek yapalım.
Tahmin edeceğiniz gibi 1. örneğimizi code behind olarak yazdık. 2. örneğimizde
de yine aynı yöntemi kullanacağız. Örneğimizi aspx formu şu şekildedir:
<%@
Page language="c#" Codebehind="Ornek2.aspx.cs" AutoEventWireup="false"
Inherits="RepeaterKontrolu.Ornek2" %>
<HTML>
<HEAD>
<title>Repeater
Ornek1</title>
<meta
http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
</HEAD>
<body
MS_POSITIONING="GridLayout">
<form
id="Form1" method="post" runat="server">
<table>
<asp:Repeater
id="Repeater1" runat="server">
<headertemplate>
<tr
bgcolor="#000066">
<td>
<strong><font
color="#FFFFFF" size="2" face="Verdana, Arial,
Helvetica, sans-serif">
Şirket
</font></strong>
</td>
<td>
<strong><font
color="#FFFFFF" size="2" face="Verdana, Arial,
Helvetica, sans-serif">
İlgili
kişi
</font></strong>
</td>
<td>
<strong><font
color="#FFFFFF" size="2" face="Verdana, Arial,
Helvetica, sans-serif">
Şehir
</font></strong>
</td>
<tr>
</headertemplate>
<ItemTemplate>
<tr
bgcolor="#DDFFD7">
<td>
<font
size="2" face="Verdana, Arial, Helvetica, sans-serif">
<%#
DataBinder.Eval(Container.DataItem, "CompanyName") %>
</font>
</td>
<td>
<font
size="2" face="Verdana, Arial, Helvetica, sans-serif">
<%#
DataBinder.Eval(Container.DataItem, "ContactName") %>
</font>
</td>
<td>
<font
size="2" face="Verdana, Arial, Helvetica, sans-serif">
<%#
DataBinder.Eval(Container.DataItem, "City") %>
</font>
</td>
<tr>
</ItemTemplate>
<alternatingitemtemplate>
<tr
bgcolor="#E8F5FF">
<td>
<font
size="2" face="Verdana, Arial, Helvetica, sans-serif">
<%#
DataBinder.Eval(Container.DataItem, "CompanyName") %>
</font>
</td>
<td>
<font
size="2" face="Verdana, Arial, Helvetica, sans-serif">
<%#
DataBinder.Eval(Container.DataItem, "ContactName") %>
</font>
</td>
<td>
<font
size="2" face="Verdana, Arial, Helvetica, sans-serif">
<%#
DataBinder.Eval(Container.DataItem, "City") %>
</font>
</td>
<tr>
</alternatingitemtemplate>
<footertemplate>
<tr
bgcolor="#990000">
<td
colspan="3">
<font
face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"
size="2">
<b>
Kayıt Sayısı: <%=
KayitSayisi %> </b>
</font>
</td>
<tr>
</footertemplate>
</asp:Repeater>
</table>
</form>
</body>
</HTML> |
Ornek2.aspx
Ornek2’ de Repeater
kontrolünde kullanabileceğiz 5 şablondan 4 tanesini kullandık. SepearatorTemplate’
i kullanmamızın sebebi ise örnekte verileri bir tablo içinde görüntülememizdir.
Burda dikkatinizi FooterTemplate’ deki <%=
KayitSayisi %> kısma çekmek istiyorum. Aşağıdaki C#
kodunda göreceğiniz gibi KayitSayisi değişkenine toplam kayıt
sayısını atadık. Aşağıda ise örnek 2’ nin C# kodu bulunmaktadır:
using
System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls; namespace
RepeaterKontrolu{
public class Ornek2 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater
Repeater1;
protected
int KayitSayisi;
private
void Page_Load(object sender, System.EventArgs e)
{
//
Sayfa ilk yükendiğinde veriyi Veritabanından
//
getiren metodu çağıralım:
this.VeriGetir();
}
public
void VeriGetir()
{
//
Önce bir bağlantı nesnesi oluşturalım.
//
Bağlantı nesnesinin yapılandırıcısına bağlantı cümlemizi yazıyoruz:
OleDbConnection
objConn = new OleDbConnection("Data Source=C:\\Northwind.mdb; Provider=Microsoft.Jet.OLEDB.4.0;");
//
Çalıştıracağımız komutu oluşturalım.
//
Komutunda yapılandırıcısına da SQL sorgumuzu eklemeyi unutmuyoruz.
//
Sorguda sadece ’M’ harfile ile başlayan şehirleri getiriyoruz:
OleDbCommand
objCmd = new OleDbCommand("SELECT Customers.CompanyName, Customers.ContactName,
Customers.City FROM Customers WHERE City LIKE ’M%’ ; ");
//
Bağlantımızı ile komutumuzu ilişkilendirelim:
objCmd.Connection
= objConn;
//
Bir veri adaptörü oluşturalım:
OleDbDataAdapter
objDataAdapter = new OleDbDataAdapter(objCmd);
//
Bir tane veri tablosu oluşturalım.
//
Genelde örnekte DataSet oluşturlur ama bizim birden fazla
//
veri kümesi beklemediğimiz için DataSet e ihtiyacımız yok!
DataTable
objDt = new DataTable();
//
bağlantmızı açalım:
objConn.Open();
//
veri tablomuzu adaptör yardımı ile dolduralım:
objDataAdapter.Fill(objDt);
//
bağlantıyı kapatalım:
objConn.Close();
//
Repeater nesnemize veri kaynağını gösterelim:
Repeater1.DataSource
= objDt;
//
Veriyi Repeaster nesnemize bağlayayalım:
Repeater1.DataBind();
//
Toplam kayıt sayısını DataTable’den direk alabiliriz.
//
Bunu da KayıtSayisi değişkenine atıoyruz:
KayitSayisi
= objDt.Rows.Count;
}
}
}
|
Ornek2.aspx.cs
Dikkat ettiyseniz
Ornek2.aspx.cs
ile Ornek1.aspx.cs
birbirine çok benziyor. Değişen kısımlar yukarıdaki kodun içinde kırmızı ile
yazılmıştır. Ayrıca sorguda da ufak bir değişiklik yapıp sadece ’M’ harfi ile
başlayan şehirlerdeki müşterileri sorguladık. Bu kodun çalışması sonucunda şöyle
bir sonuç almalıyız:
Bu makalemizde
Repeater kontrolünü ve onun içinde şablonları nasıl kullanacağımızı incelemeye
çalıştık. İlerki makalelerimizde Repeater kontrolünde şablonlara stil (style)
uygulamanın yolunu ve kayıtları nasıl sayfa sayfa görüntüleyeceğimizi anlatmayı
planlıyorum.
Ayrıca
makalede yaptığımız örneklerin kodunu da burdan indirebilirsiniz.
Makale:
ASP.NET Repeater Kontrolü ASP.NET Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|
|