Gelişmiş Repeater İşlemleri
Bu yazı 8 ay 17 gün önce yayınlanmış olduğundan güncelliğini yitirmiş veya içeriğindeki bilgilerin geçerliliği kaybolmuş olabilir. Herhangi bir yanlış anlaşılmadan bu site sorumlu değildir. ASP.NET ile gelen en basit veri gösterme kontrolüdür Repeater kontrolü. Yaptığı iş, verileri arka arkaya koyarak göstermektir. Template bir kontroldür, yani çıktıyı HTML olarak istediğimiz gibi biçimlendirebiliriz. Bu makalede, Repeater kullanımına girmeyeceğim. Sadece ön bilgi olsun diye söyledim.
Bu yazıda, Repeater kontrolüyle biraz gelişmiş bir uygulama yapacağız. Problem şu: Bir portal sistemi bulunmakta ve kullanıcılar buradaki yazılara yorum yapabilmektedirler. Buraya kadar hiçbir sorun yok. Sorun, yorum sayılarını bulmakta ve yazının yanında göstermekte ortaya çıkıyor. Portalımızda iki adet tablo(makale ve yorum olmak üzere) bulunmakta. Ve bizim istediğimiz şey, ID numarası belli olan yazının kaç yorum aldığını gösterebilmek. Açıkçası bir aralar başımı ağrıtan bir problemdi
Asıl sorun, iki sorgunun sonuçlarını nasıl birleştireceğimizde. İşte ben de şöyle bir çözüm buldum: Dataset’i direkt DataSource’a bağlamak yerine, bir adet DataTable oluşturdum. Makale tablosundan veri geldiği sürece dönen bir döngü ve döngü içerisinde DataTable’a verileri satır satır eklemek; bunu eklerken bir sorgu daha yapıp yorum sayısını bulmak. İlk başta biraz karışık gibi mi gözüküyor? Benim uslubumdan olabilir
Yeni bir ASP.NET projesi oluşturalım ve projeye bir adet Repeater ekledikten sonra kaynak tarafında geçelim ve Template’ini aşağıdaki gibi kodlamaya başlayalım:
<%@ 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>Repeater İle Gelişmiş Gösterimler</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate><h1>Veritabanından Çekilen Veriler</h1></HeaderTemplate>
<ItemTemplate>
<h3><%#Eval("mBaslik")%> </h3><br />
<%#Eval("mIcerik") %> <br />
<%#Eval("ySayisi") %> Yorum
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
Şimdi kod tarafına geçelim ve biraz parmakları çalıştıralım
Başlamadan önce OleDB referansını projeye eklemeyi unutmayalım. Bu arada ConnectionString’i Web.Config ‘ten çektiriyorum.
using System;
using System.Data;
using System.Configuration;
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.OleDb;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Open Connection
OleDbConnection cnn = new OleDbConnection(ConfigurationManager.ConnectionStrings["portalConnectionString"].ToString());
cnn.Open();
// Select Command
OleDbCommand cmdSelect = new OleDbCommand("Select [id],[mBaslik],[mIcerik] from [makale]", cnn);
OleDbDataReader drSelect;
// Run Query
drSelect = cmdSelect.ExecuteReader();
// Create DataTable and Colomns
DataTable dt = new DataTable();
dt.Columns.Add("mBaslik", typeof(String));
dt.Columns.Add("mIcerik", typeof(String));
dt.Columns.Add("ySayisi", typeof(Int32));
// Create DataRow
DataRow dr;
// While = drSelect is Reading..
while(drSelect.Read())
{ // New DataTable Row
dr = dt.NewRow();
// Get Data from DataReader
dr["mBaslik"] = drSelect["mBaslik"].ToString();
dr["mIcerik"] = drSelect["mIcerik"].ToString();
// Find Comment Number
OleDbCommand cmdFindYorum = new OleDbCommand("Select COUNT(*) from [yorum] Where [yID] = " + drSelect["id"].ToString() + "",cnn);
OleDbDataReader drFindYorum = cmdFindYorum.ExecuteReader();
drFindYorum.Read();
dr["ySayisi"] = Convert.ToInt32(drFindYorum[0]);
// Add Row to the DataTable
dt.Rows.Add(dr);
drFindYorum.Close();
}
// Close Connections
drSelect.Close();
cnn.Close();
// Bind data with Repeater1
Repeater1.DataSource = dt.DefaultView;
Repeater1.DataBind();
}
}
Öncelikle, asıl veriyi getirecek olan sorguyu yazıp çalıştırıyoruz ve bu kayıtların döndüğü kadar bir döngüye sokuyoruz. Döngüye girmeden hemen üstündeki satırlarda ise, DataTable ve DataTable’ın kolonları ve bu kolonların veri tipleri tanımlanıyor. Döngü içerisinde de bu satırlar oluşturuluyor ve bu satırlara sırasıyla veriler yerleştiriliyor. Ve en son Repeater ile bağlanıyor. Bir zamanlar çok başımı ağrıtan bu sorunu(birden fazla sorgu çalıştırabilme) böylece çözmüş bulunuyorum. Bir başka yol da, Label ‘ları bağlamak. Bu yol daha kullanışlı olduğu için bu yolu anlatmayı ve uygulama yapmayı uygun gördüm. Örnek projeyi, http://download.mesuterdemir.com/asp.net/XRepeater.zip adresinden indirebilirsiniz. Uygulamanın örnek çıktısı aşağıdaki gibidir. İyi çalışmalar
Bu konuyla ilgili hiçbir yazı bulunamadı!

SDU - Bilgisayar Programcılığı mezunuyum. Sıkı bir Linuxçu ve Özgür Yazılım felsefesini benimsemiş biriyim.
