ASP.NET'te Veri Bağlama (Data Binding) Nasıl Yapılır

bej(49)
Published in
#utopian-io
Words
2536
Reading
12 min
Listen
Play
9y


What Will I Learn?

Asp.Net daha az kod sloganına uygun olarak işimizi kolaylaştıracak sihirbazlar ve araçlar sunar. Bu yazıda ASP.Net'te giriş seviyesi veri işlemeyi öğreneceğiz.

Requirements

ASP.NET Core

Difficulty

Beginner

Tutorial Contents

  1. Veri işleme modeli
  2. Kaynak (data source) kontrolleri
  3. Kaynak kontrollerini konfigüre etmek
  4. Data view kontrolleri

ASP.NET'te Veri Bağlama (Data Binding) Nasıl Yapılır

1.Bölüm Basit Veri İşleme

Bu bölümde önce çok kısa bir bir şekilde veri işleme modelini inceleyeceğiz. Bu modeli kısa geçmemin sebebi modelin araçlarını tanıdıkça modeli daha iyi kavrayacağınıza inandığımdan ve de uzun halini yazdığımda yazının devasa boyutlara ulaştığındandır. Daha sonra ilk üç data source kontrolünü tanıyacağız. Sonra sunum(UI) kontrollerini işleyip makalemizi anlattığımız konuları örnekleyerek bitireceğiz.

1.1. Veri İşleme Modeli

ASP.NET'te web programcısına bırakılan bir çok iş artık web kontrolleri tarafından üstleniliyor. Veri işleme mimarisini en küçük cümlelerle ve basit bir şekilde şöyle özetleyebilirim. Her veri sunum (UI) kontrolü veriye ulaşmak için bir kaynak (Data Source) ile çalışır. Sunum kontrolü ile kaynak kontrolü arasındaki ilişki CRUD (Create, Read, Update, Delete) dediğimiz 4 temel işlem üzerine kurulmuştur.

Bu işlemler veriyi oluşturmak, okumak, güncellemek ve silmektir. Sunum kontrolü kendi durumuna (state) göre kaynak kontrolünün ilgili fonksiyonunu kullanır. Aslında bu genellemeyi yapmak yanlış olabilir çünkü tüm kontroller bu 4 fonksiyonaliteyi desteklemek zorunda değildirler. Zorunda oldukları tek fonksiyonalite veriyi okumaktır ve getirmektir. Ama genelleme yaparken tüm fonksiyonaliteleri saymakta bir zarar görmüyorum.

Bazı sunum kontrolleri sayfalama, sıralama gibi extra özellikler sunabilir. Bu özellikler kontrolün kullandığı kaynak ile ilgili olabilir. Genelde sunum kontrollerinin hepsi tüm kaynak kontrolleri ile çalışabilirken bazı sunum kontrollerini belirli kaynaklarla kullanmak yerinde olur. Örneğin tree-view kontrolünü xmldatasource ve ya sitemapdatasource kontrolleri ile kullanmak yerinde olacaktır.

Bu kadar çok çeşit veri kaynağını desteklerken bunları 5 temel kontrol ile destekleye bilmek ve gene bütün yapıyı DataSource paydasında toplayabilmek gerçekten büyük kolaylık sunar. Buna rağmen veri kaynaklarının yapılarındaki farklılıklar kaynak kontrollerinede yansır. Her kontrol kendine göre değişik ayarlara ve mekanizmalarına sahiptir. Yukarıda bahsettiğim ortak fonksiyonların yanında Caching gibi fonksiyonlarda sunarlar.

Daha önce kullanmış iseniz bilirsiniz ve ya kullanmadı iseniz biraz sonra öğreneceksiniz, Asp.net siteleri geliştirirken visual studio ile çalışıyorsanız geliştirme anında kullandığınız kontrol ve kaynağa göre önünüze genel görev menüsü gelir. Bu menü sayesinde veri işleme mekanizmanızı kolayca oluşturabilirsiniz, neredeyse hiç kod yazmadan. Gelin isterseniz önce kaynak (data source) kontrollerimizi tanıyarak başlayalım.

1.2 Kaynak (Data Source) kontrolleri

Yukarıda özetle bahsettiğimiz gibi kaynak kontrollerimiz veri işleme mekanizmamızda sunum kontrollerimize 4 temel fonksiyonaliteyi sunmak üzere tasarlanıştır. Değişik kaynak kontrolleri değişik veri kaynakları üzerinde bu fonksiyonların hepsini ve ya bir kısmını destekleyebilirler. Bu kontrollere geçmeden önce bu kontrollere temel teşkil eden "DataSourceControl" kontrolümüzü tanıyalım.

Kod 1.1 Data Source Kontrolü

public abstract class DataSourceControl : Control, IDataSource, IListSource {... diğer alan tasarrufu için silindi protected abstract DataSourceView GetView(string viewName); protected virtual ICollection GetViewNames(); protected virtual void RaiseDataSourceChangedEvent(EventArgs e)}

Kontrolün şu anda bizi ilgilendirmeyen metodları çıkarıldığında geriye kalan sadece veriyi getiren ve kaynakta bir değişiklik olduğunda uyaran bir mekanizmadır. Sanırım çoğunuzun görebildiği üzere burada observer tasarım deseni(design pattern) vardır.

Bu kontrolün implement ettiği iki interface olan "IDataSource" ve "IListSource" ise sırasıyla söyledir.

Kod 1.2 IDataSource & IListSource

public interface IDataSource{event EventHandler DataSourceChanged;DataSourceView GetView(string viewName);ICollection GetViewNames();}public interface IListSource{bool ContainsListCollection { get; }IList GetList();}

IDataSource kaynak kontrolümüzün veri foksiyonlarını sunarken, IListSource ise liste fonksiyonlarını sunar.

1.2.1 SqlDataSource kontrolü

"SqlDataSource" kontrolünü açıklamasında tek bir satır yazı yer alır

//Represents an SQL database to data-bound controls.

Bu cümle tüm kontrolün amacını açıklamaya yeter. Ama anlamayanlar için şöyle tercüme edebilirim, veri işleyebilen kontroller için Sql veri-tabanı,başka bir deyişle sql veri kaynağı , sunar. Gelin önce kodunu inceleyelim.

Kod 1.3. SqlDataSource

public class SqlDataSource : DataSourceControl
{
//Constructors : veri kaynağını oluşturmak için bir connection string yani bir veri tabanı bağlantısı ve sql select cümleciği kullanır.
public SqlDataSource();
public SqlDataSource(string connectionString, string selectCommand);
public SqlDataSource(string providerName, string connectionString, string selectCommand);
// Caching : veriyi "Cahce" de saklayabilir
[TypeConverter(typeof(DataSourceCacheDurationConverter))]
[DefaultValue(0)]
public virtual int CacheDuration { get; set; }
public virtual DataSourceCacheExpiry CacheExpirationPolicy { get; set; }
public virtual string CacheKeyDependency { get; set; }
public virtual bool EnableCaching { get; set; }
public virtual string SqlCacheDependency { get; set; }
public virtual bool CancelSelectOnNullParameter { get; set; }
public ConflictOptions ConflictDetection { get; set; }
// Veri tabanı bağlantısı
public virtual string ConnectionString { get; set; }
//veriyi okuma şekli
public SqlDataSourceMode DataSourceMode { get; set; }
// Veri tabanyndan okumak ve yazmak için gerekli herşey
public string DeleteCommand { get; set; }
public SqlDataSourceCommandType DeleteCommandType { get; set; }
public ParameterCollection DeleteParameters { get; }
public string FilterExpression { get; set; }
public ParameterCollection FilterParameters { get; }
public string InsertCommand { get; set; }
public SqlDataSourceCommandType InsertCommandType { get; set; }
public ParameterCollection InsertParameters { get; }
public string OldValuesParameterFormatString { get; set; }
public virtual string ProviderName { get; set; }
public string SelectCommand { get; set; }
public SqlDataSourceCommandType SelectCommandType { get; set; }
public ParameterCollection SelectParameters { get; }
public string SortParameterName { get; set; }
public string UpdateCommand { get; set; }
public SqlDataSourceCommandType UpdateCommandType { get; set; }
public ParameterCollection UpdateParameters { get; }
// yapılan işlemlerin ve durum değişikliklerinin eventleri
public event SqlDataSourceStatusEventHandler Deleted;
public event SqlDataSourceCommandEventHandler Deleting;
public event SqlDataSourceFilteringEventHandler Filtering;
public event SqlDataSourceStatusEventHandler Inserted;
public event SqlDataSourceCommandEventHandler Inserting;
public event SqlDataSourceStatusEventHandler Selected;
public event SqlDataSourceSelectingEventHandler Selecting;
public event SqlDataSourceStatusEventHandler Updated;
public event SqlDataSourceCommandEventHandler Updating;
// Diğer metodlar
protected virtual SqlDataSourceView CreateDataSourceView(string viewName);
public int Delete();
protected virtual DbProviderFactory GetDbProviderFactory();
protected override DataSourceView GetView(string viewName);
protected override ICollection GetViewNames();
public int Insert();
protected override void LoadViewState(object savedState);
protected internal override void OnInit(EventArgs e);
protected override object SaveViewState();
public IEnumerable Select(DataSourceSelectArguments arguments);
protected override void TrackViewState();
public int Update();
}

Korkmayın diğer kontrollerin kodlarını böyle ayrıntılı bir şekilde incelemeyeceğim ama inceleyeceğim ilk kontrol olması hasebiyle SqlDataSource’un methodlarını teker teker olmasada guruplayarak anlatacağım.

Önce her kontrol gibi bu kontrollde belirli bir fonksiyonaliteyi sunmak için kullanılır ve bu fonksiyonalitenin en asgari hali olan Sql DB den bilgi çekmeyi gerçekleştirebilmek için bir DB bağlantısına ve bilgiyi çekecek Sql Query cümleciğine ihtiyaç duyar. Gördüğünüz üzere SqlDataSource bu constructor’lara sahiptir.

Sonra sadece veriyi getirmek,okumak, değil diğer üç temel fonksiyonaliteyi ,oluşturmak , silmek ve güncellemek, sağlayabilecek metodlara da sahiptir. Bu noktada özellikle dikkatinizi çekmek istediğim bir husus vardır ki DataSourceMode yani veriyi getirirken kullanacağı yöntem. Bu iki moddan ilki olan DataSet veriyi DataSet olarak getirir ve en temel özelliklerden biri olan sayfalama (paging) fonksiyonalitesini sağlayabilir. Diğeri ise DataReader’dır. Bu modda ise data reader olarak geleceği için sayfalanma desteklenemez.

CRUD fonksiyonlarında istediğinizi sağlamak sizin elinizdedir. Ayrıca işinizi çok kolaylaştıran editörü sayesinde bu kontrolü kolayca oluşturabilir ve istediğiniz ayarları yapabilirsiniz. Biraz sonra vereceğimiz örnekte bu editörü yakından tanıma fırsatı bulacaksınız.

SqlDataSource yapmakta olduğu ve ya bitirdiği Veri tabanı işlemleri hakkında event'lere sahiptir. Bu event'ler sayesinde işlem başlamadan ve ya bittikten sonra istediğiniz işlemleri yapabilirsiniz.

Son olarak SqlDataSource veriyi cache’de saklayabilir. ASP.NET 'in gözdelerinden olan SqlCacheDependencı mekanizması ile kullanılabilir. Eğer doğru kullanılırsa çok iyi performans kazaçları elde edilebileceği gibi yanlış kullanımlarda çok zor durumlar yaratabilir. Özellikle DB yapılan değişikliklerden bihaber saklanmış veri çok baş ağrıtır.

SqlDataSource Sql Server, oracle gibi sağlayıcı (provider) desteği olan sql veri tabanı'ler ile çalışabilir, ancak Access için bir sonraki inceleyeceğimiz kontrol olan AccessDataSource kontrolü de kullanılabilir.

1.2.3 AccessDataSource kontrolü

AccessDataSource kontrolü SqlDataSource kontrolünün üzerine kurulmuş bir kontroldür. Ek olarak access db dosyaları ile çalışmak için özelleştirilmiştir ve access için özelleştiğinden SqlCacheDependencı desteği yoktur.

1.2.4. SiteMapDataSource kontrolü

Bu gün tanıyacağımız son kaynak kontrol olan SiteMapDataSource kontrolü Asp.net'te gelen yeni bir dosya türü olan site map dosyaları ile çalışır. "HierarchicalDataSourceControl" olan bu kontrol site gezinti (navigation) mekanizması içinde kullanılır.

1.3 Kaynak Kontrollerini Konfigure Etmek

Kaynak kontrollerini konfigüre ederken çalışılan kaynağa göre basamaklar farklılık gösterir. Ama genel olarak yapılacaklar, başlantı ayarları (connection), veri fonksiyonları (Select, Update, Delete, Insert) ayarları ve son olarak fonksiyon paratmetrelerini başlamaktır. şimdi kontrollerimiz için ayarları teker teker görelim.

1.3.1. SqlDataSource konfigurasyonu

SqlDataSource sql veri tabanı’leri ile çalıştığı için birden fazla veri tabanı türünü desteklemek durumundadır. Hangi db ile çalıştığını bağlantı ayarlarından (connection string) çözümleyebilecek kadar zeki olduğu için bizim bir seçim yapmamıza gerek kalmaz.

1.3.1.1. Bağlantı Ayarları

şekil 1.1 Bağlantı Ayarları

Kaynak kontrolleri için bağlantı ayarı demek "connection string" demektir. Designer Web Konfigürasyon dosyasındaki ve "Server Explorer" daki bağlantı ayarlarını bize listeler ve bunun yanında yeni bağlantı ayarlamak için "New Connection" butonunu kullanabiliriz.

Bağlantıyı kendimiz .aspx dosyası içerinde de seçebiliriz.

Kod 1.4. .aspx bağlantı ayarları

ConnectionString="<%$ ConnectionStrings:Constr %>"

Yukarıdaki notasyonda web konfigurasyon dosyasından "Constr" isimli bağlantıyı seçeriz. Bu sayede konfigurasyon değişsede .aspx dosyaları değişmez.

Bağlantı ayarını kod içerisinden de belirmek mümkündür.

Kod 1.5. kod ile bağlantı ayarları

SqlDataSource1.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["Connection string Adı"].ConnectionString;

1.3.1.2. SQL Query seçimi

Bağlantı ayarlarından sonra yapacağımız ikinci işlemde sql cümleciklerini oluşturmaktır. Bu noktada Visual Studio çok büyük bir destek sunar. İki şekilde designer ile cümlecikleri oluşturabiliriz. Birincisi tabloyu seçer, sonra "Where" ile eleme ifadeleri , OrderBy ile sıralama ifadeleri, Advanced seçeneğinden Insert, Update ve Delete cümleciklerini oluşturabiliriz.

şekil 1.2. Where ile eleme ifadeleri oluşturmak.

Bu ekranda where parametrelerini başlamayıda görüyorsunuz ancak biraz sonra parametre başlama işini detayları ile ele alacağız.

şekil 1.3. Order By ifadeleri oluşturmak.

şekil 1.4. INSERT, UPDATE, DELETE

Designer tarafından desteklenen ikinci yolda SELECT , UPDATE , DELETE ve INSERT cümleciklerini kendimizin oluşturmasıdır.

şekil 1.5. SQL Cümleciklerinin oluşturlması

İsterseniz query builder ile oluşturabilirsiniz, isterseniz kendiniz yazabilirsiniz ve ya sadece sotred procedure seçebilirsiniz. Designer kullanmak istemezseniz, .aspx dosyasından ve kod içersinden de Sql cümleciklerini oluşturabilirsiniz.

1.3.1.3. Parametre başlama

Data Sorce kontrolleri ile çalışırken parametre kullanabilirsiniz ve hatta daha güzeli bu parametreleri başlayabilirsiniz. Sql cümleciklerini oluşturduktan sonra eğer bu cümlecikler içerisinde parametreniz varsa bu parametreleri değişik kaynaklara başlayabilirsiniz.

Bu kaynaklar Cookie, Form, Control, QueryString, Profile ve Session'dır. Cookie ile başlarken cookie adını, Form ile başlarken form alanının adını, control ile başlarken kontrolün ID ve veri özelliklerini, Profile ile başlarken profile özelliğinin adını, querystring ile başlarken alan adını ve son olarak session ile çalışırken session anahtarını (Key) belirtmemiz gerekir.

şekil 1.6 Parametre bağlama

1.3.2 Access Data Source Konfigürasyonu

AccessDataSource kontrolünden bahsederken bu kontrolün SqlDataSource kontrolünden türediğini söylemiştik. Dolayısıyla konfigürasyonda da çok küçük bir değişiklik gerektiriyor. Bağlantı ayarları yerine bizden bir dosya yolu istiyor. Tahmin edebileceğiniz üzere bu dosya access db türünde bir dosya.

şekil 1.7 data dosyası seçme

1.3.3. SiteMapDataSource konfigürasyonu

SiteMapDataSource kontrolünün en güzel yanı hiç bir ayarlama gerektirmemesidir. Otomatik olarak “.sitemap” uzantılı dosyayı kullanmaya başlar. “.sitemap” dosyaları ASP.NET 2.0 ile gelen yeni bir dosya türüdür. Yapısı aşağıdaki gibidir.

Kod 1.6. SiteMap dosya örneği

<?xml version="1.0" encoding="utf-8" ?><siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" ><siteMapNode url="" title="" description=""><siteMapNode url="" title="" description="" /><siteMapNode url="" title="" description="" /></siteMapNode></siteMap>

Bir Xml dosyası olduğu için XML dosyalarının taşıması gereken tüm özellikleri taşımak zorundadır.

1.4 Sunum (Data View) kontrolleri

Asp.NET sayfalarında veri işlerken veri genelde iki desen halinde bulunur. Birden fazla kayıt yani bir liste halinde ve ya bir kaydın ayrıntıları halinde. Asp.NET 'in sunum kontrolleri yaratılırken de bu durum göz önüne alınmış. GridView, DataList ve Repeater gibi kontroller liste halindeki veri ile Details View ve Form View gibi kontroller ise bir kaydın ayrıntıları ile çalışmak için oluşturulmuştur.

Bunun yanynda benim gözlemlediğim ikinci bir durumda kontroller verinin sunumunu belirli seviyelerde programcıya bırakmıştır. GridView ve Details View kontrolleri programcıya daha kısıtlı bir etkileme alanı sağlarken, Data List, Repeater ve Form View ipleri daha çok programcıya teslim etmiştir. 

1.4.1 Grid View kontrolü

DataGrid kontrolü sonraki sürümlerde karşımıza GridView olarak çıkıyor. Microsoft'a göre sadece ismi değil, GridView daha hızlı, daha akıllı ve kullanışlı. Sayfalama (paging), sıralama (sorting) gibi fonksiyonları sunuyor. Ayrıca resim ve hyperlink gibi yeni kolon tiplerini de destekliyor.

Yeni veri işleme modeline göre bir kaynak (Data source) kontrolü ile çalışabilecek şekilde tasarlanan gridview Visual Studio'nun sunduğu designer desteği sayesinde kolayca konfigure edilebiliyor. Kaynak seçiminden sonra otomatik olarak kolonlar oluşturuluyor size sadece hangi fonksiyonları seçeceğiniz kalıyor. İsterseniz kolonlar üzerinde değişiklik yapmanız mümkün ama hiçbir değişiklik yapmadan da kullanabilirsiniz. Visual Studio tarafından sağlanan genel görevler menüsü gridview kontrolünü kolayca konfigüre edebilmenizi sağlıyor.

eçtiğimiz kaynağın yeteneklerine göre genel görevler menüsü Paging, Sorting gibi seçenekleri sunuyor. Bunun dışında Edit Columns seçeneğinden kolonları düzenlemekte mümkün. Örneğin tarih gösteren kolonun tarih gösterim formatını kolayca değiştirebiliriz ve başlıkları Türkçe'ye çevirebiliriz. Bu noktada şunu belirtmemde fayda var web sitelerimizi yöreselleştirirken kullanılmak üzere Localization mekanizmasını ileriki makalelerimizde inceleyeceğiz. Son olarak gridview kontrolünü şekillendirirken Auto Format menüsünü kullanarak kolayca önceden tasarlanmış sitilleri grid view kontrolüne uygulayabiliriz.

şekil 1.10. Kolonları düzenlemek

Grid View Üzerinde bir miktar düzenleme ile hiç kod yazmadan aşağıdaki hale getirmemiz mümkün.

GridView kontrolünü sonlandırırken şunu tekrar hatırlatmalıyım ki GridView kontrolü liste halindeki görüntülemeleri yapmak, listede sıralama seçme gibi işlemlerin yanında silme ve düzenleme yapma fonksiyonlarını sunuyor. Bu kadar fonksiyonaliteyi sunması sizi yanıltmamalı, benim tavsiyem üreteceğiniz uygulamalarda grid view i listelemek ve sayfalamak için kullanın yerine göre sıralama ve silme fonksiyonlarınıda ekleyebilirsiniz. Ancak silme ve düzenleme gibi fonksiyonları FromView ve ya DetailsView gibi kontrollere bırakırsanız daha uygun olur. Örneğimizde bul ilişkiyi nasıl kuracağımızı inceleyeceğiz.

1.4.2. DetailsView Kontrolü

GridView’in aksine DetailsView bir tek kayıt ile çalışmak için tasarlanmıştır. Sayfalama yeteneği sayesinde bir den fazla kayıt ile çalışabilse de çok fazla kayıt ile çalışması gerçekten çok pratik olmayan sonuçlar doğurabilir. Aynen GridView de olduğu gibi kaynağın belirtilmesi ile kolonlar bizim için oluşturulur. Aynı şekilde istediğimiz fonksiyonları seçip Alan (field) ları düzenleyebiliriz ve son olarak AutoFormat ile stil verebilirsiniz.

DetailsView çalışma anında 3 ayrı durum için 3 ayrı sunum sunar. Bunlar gösterim (select) , düzenleme (edit) ve son olarak oluşturma (insert). Düzenleme ve oluşturma modunda alanların türlerine göre TextBox benzeri kontroller sunar. düzenleme modunda düzenlenen veri gösterilirken , oluşturma modunda alanlar boş döner.

şekil 1.15. Oluştur modunda bir DetailsView

1.4.3. DataList Kontrolü

Yukarıdaki sınıflandırmada DataList kontrolünde programcı etkinliğinin daha fazla olduğunu söylemiştik. GridView in aksine tablo yapısı ile kısıtlamak yerine ASP.NET'deki Repeater kontrolü gibi template (şablon) temelli bir yapı sunar. Bu şablonlar içerisini istediğimiz şekilde biçimlendirebiliriz. Visual Studio'nun designer'ı kaynak seçimi sırasında bu şablonları bizim için biçimlendirebilir ama çogu zaman bu haliyle bırakmayız.

şekil 1.17. Otomatik konfigüre edilmiş bir DataList kontrolü

şablonlar üzerinde değişiklik yaparken öğrenmemiz gereken bir konuda şablon içerisindeki kontrollere veri atamaktır. Bu işi designer aracılığı ile yapabileceğimiz gibi kod içerisinden de yapabiliriz. Designer ile başlama yaparken hızlı bir şekilde alan başlamasını kullanabiliriz ve ya kendi ifadelerimizi kullanbiliriz.

Kod 1.7. Kod içerisinden bağlama

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='Message.aspx?Id=<%# Eval("Id")%>' Text='<%# Eval("Title") %>'></asp:HyperLink><br /><asp:Label ID="KeywordsLabel" runat="server" Text='<%# Bind("Keywords") %>'></asp:Label><br />

Kod içerisinden bağlama sırasında iki anahtar kelime kullanılır. Bunlardan ilki "Eval" kelimesidir. "Eval" kelimesi tek yönlü bağlama için kullanılır. Sadece verinin okunması için kullanılır. Tek yönlü olduğu için bir kontrole bağlanması zorunlu değildir. Diğer kelimede "Bind" kelimesidir. "Bind" çift yönlü bağlama işlemlerinde kullanılır. Özellikle insert, update gibi işlemler sırasında kullanılır. "Eval" ifadelirinin aksine bir kontrole ve o kontrolün "Bindable" olarak işaretlenen bir özelliğine bağlanmalıdır.

1.4.4. Repeater Kontrolü

Bu kontrol şablon temelli bir yapı sunuyor. Bir çoğumuzun tanıdığı bu kontrolü sadece örneklemekle yetineceğim.

Kod 1.8. Repeater kontrolü

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="AccessDataSource1"><ItemTemplate><div class="Blog_Message_Banner" align="right" ><%#((DateTime)Eval("Date")).ToString("MMMMMM dd, yyyy")%> (<%#Eval("Categori") %>)</div><div class="Blog_Message" style="padding: 3px 3px 3px 3px"><a class="Blog_Message_Title" href="BlogMessage.aspx?Id=<%# Eval("MessageId") %>"><%#Eval("Title")%></a><br /><%#Eval("Text")%> <br /><span style="font-style:italic; font-weight:bold">Bilen Yavuz</span><br /><%#((DateTime)Eval("Date")).ToString("MMMMMM dd, yyyy")%> (<%#Eval("Categori") %>)<br />Anahtar Kelimeler : <%#Eval("Keywords") %></div></ItemTemplate><SeparatorTemplate><br /><br /><br/></SeparatorTemplate></asp:Repeater>

Yukarıdaki örnekte sadece ItemTemplate ve SeparatorTemplate şablonlarını örneklediğimiz repeater kontrolü HeaderTemplate, FooterTemplate gibi şablonlarıda destekler.

1.4.5. FormView kontrolü

Bu gün tanıyacağımız son kontrol FormView kontrolü olacak. Bu kontrol DataList ve Repeater gibi şablon temelli bir yapı sunar ancak diğerlerinin aksine bir liste ile değil tek bir satır kayıt ile çalışmak için optimize edilmiştir. Dolayısıyla şablonlarıda diğerlerinden farklılık gösterir.

1.7. Sonuç

Bu yazıda asp.net veri işleme konusunun ilk yarısını, kolay yarısını, işledik. Önce kısa cümlelerle yeni modele değindik. Daha sonra üç kaynak kontrolü ile tanışık ve bunların konfigürasyonunu öğrendik. Son olarak sunum kontrollerinden bahsederek veri işlemenin ilk yazısını sonlandırdık. Sonraki yazıda daha ileri seviye konseptleri öğreneceğiz. 



Posted on Utopian.io - Rewarding Open Source Contributors

ASP.NET'te Veri Bağlama (Data Binding) Nasıl Yapılır | Ecency