|
ASP.NET Veri Bağlama |
|
Gönderiliyor lütfen bekleyin... |
|
|
Veri Bağlama Nedir, Basit Kontrollere Nasıl Yapılır?
Klasik ASP uygulamalarında, belirli bir kaynakta saklanan
verilerin kullanıcıya sunulması, veritabanına bir bağlantı açılıp bu bağlantı
aracılığı ile istenilen verilerin “RecordSet” nesnelerine alınması ve bir döngü
içerisinde ekrana yazdırılması işlemlerinin adım adım gerçekleştirilmesi sonucu
tamamlanmaktadır. Eğer okunan kayıtların yine kullanıcılar tarafindan
degiştirilmesine izin verilecek ise, geliştiriciler güncelleme ile ilgili
adımları da kodlamak zorundadırlar.
ASP.NET teknolojisinde ise veri sunumu, güncellenmesi, veri
sıralanmasi gibi niteliklere sahip farklı kontrollerin (tekrarlanan verileri
HTML biçiminde sunan kontroller) kullanılmasi ile, belirli kaynaklarda bulunan
verilerin kullanıcıya sunulması ve bu verilerin güncellenebilmesi işlemleri
kolaylaştırılmıştır. Böylelikle yazılım geliştiriciler gereksiz detaylarla
ugrasmak zorunda kalmamakta, yoğunluklarini iş mantığı geliştirmesine
kaydırabilmekte, daha okunabilir ve kaliteli yazılımlar
geliştirebilmektedirler.
ASP.NET teknolojisinde ise veri sunumu, güncellenmesi, veri sıralanması gibi
niteliklere sahip farklı kontrollerin (tekrarlanan verileri HTML biçiminde
sunan kontroller) kullanılması ile, belirli kaynaklarda bulunan verilerin
kullanıcıya sunulması ve bu verilerin güncellenebilmesi işlemleri
kolaylaştırılmıştır. Böylelikle yazılım geliştiriciler gereksiz detaylarla
uğraşmak zorunda kalmamakta, yoğunluklarını iş mantığı geliştirmesine
kaydırabilmekte, daha okunabilir ve kaliteli yazılımlar
geliştirebilmektedirler.
Yukarıdaki paragrafta bahsedilen kontroller “DataRepeater”, “DataList” ve
“DataGrid” kontrolleridir. Üç kontrolde de “header template”, “item template”
ve “footer template” bölümleri bulunmaktadır. Yazılım geliştiriciler bu
bölümler içerisinde yapacakları değişiklikler ile kontrolleri
özelleştirebilmektedirler (“template” kullanımları kod örnekleri ile daha net
anlaşılacaktır). Adlarından da anlaşılacağı üzere “header” ve “footer”
kalıpları (“template”) baş ve son kısımları kontrol etmektedir, “item” kalıbı
ise tekrarlanan veriyi yönetmektedir. “DataGrid” kontrolünde “item template”
sütunlara karşılık gelmektedir. Üç kontrolün birbirleri ile temel farkları
incelenirse; “DataGrid” ve “DataList” kontrolleri veriyi güncelleme yeteneğine
sahiptirler, “DataRepeater” bu yeteneğe sahip değildir. “DataGrid” i “DataList”
ten farklılaştıran özellikler ise sayfalama ve sıralamadır.
Kontrollere Veri Atanması
“CheckBoxList”, “RadioButtonList”, “ListBox” ve “DropDownList”
gibi kontrolleri “DataSet” (veri taşıyan nesne) nesneleri ile bağlayabiliriz.
Burada bağlamak kelimesi ile kast edilen, “DataSet” nesnelerinde saklanan verinin
ilgili kontrollerde sunulmasıdır. Bağlama işlemi kabaca, veri kaynağının belirlenmesi
ve “DataBind” metodunun kullanılarak kontrole atanması adımlarından oluşmaktadır.
Aşağıdaki örnekte “ListBox”, “DropDownList” ve “RadioButtonList” nesnelerinin
“Groups” tablosundaki veriler ile nasıl ilişkilendirildiği (bağlandığı) anlatılmaktadır.
DataBind.aspx .cs
OleDbConnection myConnection;
OleDbDataAdapter myDataAdapter;
DataSet ds = new DataSet();
string strConn="";
string strSQL="";
private void Page_Load(object sender, System.EventArgs e)
{
strConn = "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=ASPNET;User ID=sa;";
/* Veri kaynagini tanitan
baglanti cümlesi yukaridaki kod satiri ile tanimlanmakta
ve asagidaki satir ile baglanti nesnesi yaratilmaktadir.
*/
if (!Page.IsPostBack)
BindData();
}
public void BindData()
{
strSQL = "Select * from Groups";
myDataAdapter = new OleDbDataAdapter(strSQL, myConnection);
// "Fill" metodu
ile "DataSet" nesnesi doldurulmaktadir
myDataAdapter.Fill(ds, "Groups");
/* "List1" isimli
"ListBox" nesnesi ile veriler asagidaki
kod satirlari ile baglanmaktadir
*/
List1.DataSource=ds.Tables["Groups"].DefaultView;
List1.DataBind();
/* "rb" isimli "RadioButtonList"
nesnesi ile veriler asagidaki
kod satirlari ile baglanmaktadir
*/
rb.DataSource=ds.Tables["Groups"].DefaultView;
rb.DataBind();
/* "dl" isimli
"DropDownList" nesnesi ile veriler asagidaki
kod satirlari ile baglanmaktadir
*/
dl.DataSource=ds.Tables["Groups"].DefaultView;
dl.DataBind();
}
public void SubmitBtn_Click(object sender, EventArgs e )
{
string s="";
s = s + "----Selected DropDownList : " +
dl.SelectedItem.Text;
Label1.Text = s;
}
|
Kod 1: DataBind.aspx .cs (Code Behind )
DataBind.aspx
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs"
AutoEventWireup="false" Inherits="DataBinding_Makale.WebForm1" %>
<HTML>
<body>
<h3><font
face="Verdana">Binding Controls </font> </h3>
<form
runat="server">
<asp:ListBox
id="List1" DataTextField="code_display" DataValueField="code_value"
runat="server" />
<hr>
<!--
"CheckBoxList" ve "RadioButtonList" kontrollerinin
"RepeatColumn" ve
"RepeatDirection"
isimli özellikleri bulunmaktadir. "RepeatColums" ile
belirtilen
yönde kaç sütun olacagi ’tanimlanmaktadir.
-->
<ASP:radiobuttonList
repeatcolumns="4" repeatdirection="horizontal" repeatlayout="table" id="rb"
datatextfield="code_display"
DataValueField="code_value"
runat="server" />
<hr>
<asp:DropDownList
id="dl" DataTextField="code_display" DataValueField="code_value" runat="server"
/>
<hr>
<asp:button
Text="Submit" OnClick="SubmitBtn_Click" runat="server" id="Button1" />
<asp:Label
id="Label1" font-name="Verdana" font-size="10pt" runat="server" />
</form>
</body>
</HTML>
|
Kod 2: DataBinding.aspx
DataRepeater Genel Yapı ve Kod Örneği (Seride Makale 2)
Genel Yapı
“DataRepeater”, yinelenen verileri HTML biçiminde sunmak için
kullanılan kontroldür. Amaç verilerin kullanıcıya sunulmasıdır, verinin
güncellenmesi gibi özellikler bu kontrol tarafından desteklenmemektedir.
Kontrolün genel yapısı aşağıdaki gibidir.
<asp:Repeater id="Repeater1"
DataSource="<% databindingexpression %>"
runat=server>
<HeaderTemplate>
<!-- Veriye
bagli satirlar yazdirilmadan önce sadece bir kez yer almasi gereken “tag”
ler burada tanimlanmalidir. Örn: <table>
Header template
HTML -->
</HeaderTemplate>
<!--
Olmasi zorunlu olan tek “template” dir. Listenin içerigini ve planini
belirlemektedir (“content and
layout”). Veri kaynagindaki her satir için yinelenen biçimi tanimlamaktadir. -->
<ItemTemplate>
Item template HTML
</ItemTemplate>
<!-- Satir satir
bilgi yazdirilirken takip eden satirin hangi biçimde yazilacagini betimlemektedir.
Örn: Okumanin kolaylastirilmasi için bir
satirin beyaz, takip eden satirin gri yazdirilmasi. -->
<AlternatingItemTemplate>
Alternating
item template HTML
</AlternatingItemTemplate>
<!-- “Item” lar
arasindaki ayraçlarin biçiminin belirlenmesini saglamaktadir. -->
<SeparatorTemplate>
Separator template HTML
</SeparatorTemplate>
Veriye bagli satirlar
yazdirildiktan sonra sadece bir kez yer almasi gereken “tag” ler burada
tanimlanmalidir. Örn: </table>
<FooterTemplate>
Footer template HTML
</FooterTemplate>
<asp:Repeater>
|
Kod 3: Repeater genel yapı
Veriye bağlanabilen “template” ler “Item ve
AlternatingItem Template” leridir. Diğerleri veriye bağlanamamaktadır. Eğer
kullanılan veri kaynağından veri alınamazsa, sadece “Header” ve “Footer” “Template”
lerideki HTML içerik görüntülenmektedir.
“Repeater” kontrolü önceden tanımlı stiller
içermemektedir. Bu yüzden geliştirici, “template” ler arasında biçimi ve içeriği
tanımlamalıdır.
“Template” kullanımına bir örnek vermek
gerekirse, veritabanında bulunan bir tablodaki verilerin okunup “DataSet”
nesnesine alındığı varsayılsın. “DataSet” nesnesi içerisindeki verilerin sadece
kullanıcının okuması amacı ile kullanılacağı düşünülürse, “DataRepeater”
kontrolü bu amaç için en uygun kontroldür. En basit kullanım ile, “DataRepeater”
kontrolünün “HeaderTemplate” kısmında “<table>” kodu ile bir tablo
yaratılmakta, “ItemTemplate” kısmında veri kaynağı belirtilmekte ve yazılış
biçimi tanımlanmakta, “FooterTemplate” kısmında ise “</table>” kodu ile
tablo kapatılmaktadır. Veri bağlama işlemi, ilgili sayfaya ait kodlarda
gerçekleştirilmektedir.
Kod Örnegi
Özet; bu örnekte “Groups” isimli tablodan, uygun kayıtlar “DataSet”
nesnesine alınmakta ve “Repeater” kontrolü ile sunulmaktadır. Detaylar kırmizı
yazılarda aktarılmaktadır. Bu senaryoyu kod örnegi ile açıklamak gerekirse;
Repeater.aspx.cs
OleDbErrorCollection myConnection;
OleDbCommand myCommand;
DataSet ds = new DataSet();
string strConn ="";
string strSQL = ""; private void Page_Load(object sender,
System.EventArgs e)
{
strConn = "Provider=SQLOLEDB; Data
Source=(local); Initial Catalog=ASPNET;User ID=sa;"
// Veri kaynagini
tanitan baglanti cümlesi yukaridaki kod satiri ile tanimlanmakta ve
// asagidaki satir ile baglanti nesnesi
yaratilmaktadir.
myConnection = new OleDbConnection(strConn);
if (!Page.IsPostBack)
ReBind();
}
public void ReBind()
{
strSQL = "select * from Groups";
myCommand = new OleDbDataAdapter(SQL, myConnection);
// ”Fill” metodu
ile “DataSet” nesnesi doldurulmaktadir
myCommand.Fill(ds, "Groups");
// “DataRepeat”
isimli “DataGrid” nesnesi ile veriler asagidaki
// kod satirlari ile baglanmaktadir
DataGrid1.DataSource=ds.Tables["Groups"].DefaultView;
DataGrid1.DataBind();
}
|
Kod 4: Repeater.aspx.cs
Repeater.aspx
<%@ Page language="c#"
Codebehind="WebForm2.aspx.cs" AutoEventWireup="false"
Inherits="DataBinding_Makale.WebForm2" %>
<html>
<body>
<h3><font
face="Verdana"> Data Repeater</font></h3>
<form runat=server>
<!--
“DataRepeat” kontrolü ile ilgili tüm tanimlamalar asagida yer almaktadir.
-->
<asp:Repeater
id="DataRepeat" runat="server">
<!--“HeaderTemplate”
de yeni bir tablo açilmis (HTML kodu ile), ve sütun isimleri statik olarak
atanmistir. -->
<HeaderTemplate>
<table
border = 1>
<tr>
<td><b>Name</b></td>
<td><b>Group</b></td>
<td><b>Type</b></td>
</tr>
</HeaderTemplate>
<!--“ItemTemplate” de bir veri baglama
isleminden sonra alinan
verinin yinelemeli olarak yazdirilmasi saglanmaktadir.
Veritabaninda ‘bulunan tablodan okunan veriler, tablodaki
sütun isimleri indeks ‘olarak kullanilarak çekilmektedir.
Klasik ASP uygulamalari hatirlanacak olursa, veriler
“recordset” nesnesi araciligi ile okunmakta ve bir döngü
içerisinde “Response.write” metodu kullanilarak HTML “tag”
lerine gömülmektedir . Tüm kontrol programciya aitti ve
verinin liste halinde yinelemeli olarak yazdirilmasindan
programci sorumludur. Yazilimdan anlamayan bir tasarimcinin
kod ile içiçe olmasi ve karmasiklik gibi sorunlar bu gibi
kontrollerin kullanimi ile ortadan kalkacaktir. -->
<ItemTemplate>
<tr>
<td>
<%# Container.DataItem("code_display") %></td>
<td><%#
Container.DataItem("code_category") %></td>
<td><%#
Container.DataItem("type") %></td>
</tr>
</ItemTemplate>
<!--
Takip eden satir farkli bir biçim ile sunulabilmektedir -->
<AlternatingItemTemplate>
<tr
style="background-color: silver">
<td>
<%# Container.DataItem("code_display") %></td>
<td><%#
Container.DataItem("code_category") %></td>
<td><%#
Container.DataItem("type") %></td>
</tr>
</AlternatingItemTemplate>
<!--
“HeaderTemplate” de açilmis olan tablo </table> kodu ile kapatilmaktadir
-->
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>
|
Kod 5: Repeater.aspx
Kaynaklar:
1. Microsoft ASP.NET Professional Projects
– Hersh Bhasin
ISBN:1-931841-21-7
2. www.msdn.microsoft.com
Makale:
ASP.NET Veri Bağlama ASP.NET Serkan Üstündağ
|
|
|
-
-
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
|
|