Mesut.Erdemir: Bir yazılımcının günlüğü..

Gelişmiş Repeater İşlemleri

closeBu 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 :D

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 :P 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 ;)

VN:F [1.9.3_1094]
Rating: 8.3/10 (4 votes cast)
Gelişmiş Repeater İşlemleri, 8.3 out of 10 based on 4 ratings

Bu konuyla ilgili hiçbir yazı bulunamadı!

Buraya yapılan yorumları RSS 2.0 beslemesinden takip edebilirsiniz.