26 Kas 2006 ASP.NET 2.0 ile Gelen DetailsView ve GridView Nesneleri Kategori: ASP.NET Etiketler: ASP.NET 3 Yorum Ilk olarak gridvView nesnesinden bahsedelim. Gridview nesnesi bir veritabanındaki ilgili tablo içerisindeki kayıtları göstermemize yarar. Biz projemizde SQL Server 2000 içerisindeki Northwind veritabanını kullanacagız. Yeni bir Asp.Net Projesi Açtıktan sonra; Ilk olarak formumuz üzerine GridView nesnesini yerlestirelim. Gridinizi ekledikten sonra eger gridimize biraz renk vermek istersek grid üzerinde sag tıklayarak Auto Format ile hazır grid stillerini kullanabiliriz. Gridimize güzel bir stil belirledikten sonra artık verileri çekebiliriz. Ilk olarak veritabanı baglantısı için gerekli nesneleri tanımlarız. Burada sqlDataAdapter, dataSet, ve sqlDataConnection nesnelerini kullanacagız. Artık tanımlama islemlerine geçebiliriz; Imports System Imports System.Data Imports System.Data.SqlClient Partial Class _Default Inherits System.Web.UI.Page Private Cnn As SqlConnection Private Da As SqlDataAdapter Private Ds As DataSet End Class Not: Nesnelerimizi aynı sayfa içerisinde tanımladıgımız için private olarak tanımladık. Eger bir class içerisinde tanımlamak istersek Public olarak tanımlamamız gerekir. Nesnelerimizi tanımladıktan sonra veritabanı baglantımızı saglayacak baglantı adında bir Sub yazalım. Bu Sub veritabanına baglanmamızı saglayacaktır. Partial Class _Default Inherits System.Web.UI.Page Private Cnn As SqlConnection Private Da As SqlDataAdapter Private Ds As DataSet Private Sub SetCnn() Cnn = New SqlConnection("Data source=localhost; database=northwind; uid=sa; pwd=") End Sub End Class Evet veritabanı baglantımız artık hazır. Simdi geriye verileri databaseden gride çekmek kalıyor. Gridimizde verileri görüntülemek için geriye DataTable döndüren bir function yazabiliriz. Bu Function Dısarıdan SQLString adında bir parametre ile SQL ifadesini alacak. Bu bize ileride yeni sorgular yapmamıza yarayabilir. Imports System Imports System.Data Imports System.Data.SqlClient Partial Class _Default Inherits System.Web.UI.Page Private Cnn As SqlConnection Private Da As SqlDataAdapter Private Ds As DataSet Private Sub SetCnn() Cnn = New SqlConnection("Data source=localhost; database=northwind; uid=sa; pwd=") End Sub Private Function SelectDataTable(ByVal SQLString As String) SetCnn() If Not Cnn Is Nothing Then If Cnn.State = ConnectionState.Closed Then Cnn.Open() Da = New SqlDataAdapter(SQLString, Cnn) Ds = New DataSet() Da.Fill(Ds, "table") Return Ds.Tables(0) Else Return Nothing End If End Function Functionumuzu yazdıktan sonra artık verilerimiz görüntülenmeye hazır bir sekilde bizi bekliyor. Istersek Form yüklenirken verilerimizi görüntüleyelim. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load GridView1.DataSource = SelectDataTable("SELECT * FROM Products") GridView1.DataBind() End Sub Projemizi çalıstırdıktan Sonra verilerimiz asagıdaki gibi görüntülenir. Projemizin bu kısmını basarı ile tamaladıktan sonra Projemize biraz daha hareket katalım ve projemize bir adet DetailsView Nesnesi ekleyelim. Nesnemizi ekledikten sonra Grid üzerinde sag tıklayarak Show Smart Tag ı seçerek formumuza CommondBoundlardan "Select" i ekleriz. Böylese seç butonuna tıkladıgımızda aktif kayıt seçilecek ve seçtigimiz kayda ait detay bilgiler detailsView nesnesinde görüntülenecek. Bunun için form yüklenirken (Form_load) Detailsview içerisinde ilk kaydı görüntüleyebiliriz. Daha Sonra grid üzerinden seçecegimiz kayıt detailsView üzerinde görüntülenir. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load GridView1.DataSource = SelectDataTable("SELECT * FROM Products") GridView1.DataBind() DetailsView1.DataSource = SelectDataTable(" SELECT top 1 * FROM Products") DetailsView1.DataBind() End Sub Evet simdi projemizi çalıstırdıktan sonra grid üzerinde tüm kayıtlar görüntülenir fakat, Grid üzerindeki seç butonuna tıkladıgımızda seçili kaydın detayının gelmesi için de kısa bir kod yazmamız gerekir. Bunun için GridView in GridView1_SelectedIndexChanged eventi içerisine asagıdaki kodu yazmamız gerekir. Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged DetailsView1.DataSource = SelectDataTable("SELECT * FROM Products WHERE ProductID=" + GridView1.SelectedRow.Cells(0).Text) DetailsView1.DataBind() End Sub Bu Arada Sayfamızı Html Kısmında küçük bir degisiklik yapacagız. Bunun Nedeni Hem Gereksiz alanların gösterilmesini engellemek, hemde Sayfa dizaynının daha göresel olmasını saglamaktır. <asp:GridView ID="GridView1" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None" Style="z-index: 100; left: 8px; position: absolute; top: 368px" AutoGenerateColumns="False" Width="344px"> <FooterStyle BackColor="Tan" /> <Columns> <asp:BoundField DataField="ProductID" HeaderText="Ürün No:" /> <asp:BoundField DataField="ProductName" HeaderText="Ürün Adı:" /> <asp:CommandField /> <asp:CommandField SelectText="Seç" ShowSelectButton="True" /> </Columns> <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" /> <HeaderStyle BackColor="Tan" Font-Bold="True" /> <AlternatingRowStyle BackColor="PaleGoldenrod" /> </asp:GridView> Evet artık projemizi tamamlamıs olduk. Projemizi çalıstırdıgımızda sectigimiz ürüne ait detaylı bilgi detailsView nesnesinde görüntülenecektir. Bir sonraki makalemizde görüsmek üzere...
26 Kas 2006 ASP.NET 2.0’DA ADROTATOR NESNESİ Kategori: ASP.NET Etiketler: ASP.NET 3 Yorum Biz bu makalemizde veri kaynağı olarak dataset’i ele kullanacağız. Ben Adrotator nesnesini banner olarak değil de ürün olarak ele alıp, Sayfa her açılışında farklı bir ürün gösterip, ürün üzerine link koyacağım.Ilk olark Projemizde Kullanacagımız Access database ismi Urunler.mdb dir. Bu tablo içerisinde tblUrunler isimli bir tablo bulunmaktadır. Bu tablo ürün bilgilerini içerir. Bu tablo içerisindeki alan isimleri; Yukarıdaki gibidir. Veritabanını olusturduktan sonra Projemize bir adet AdRotator nesnesi eklenir. Nesnemizi ekledikten sonra banneri görüntüleyecegimiz bir function yazalım. Farklı yöntemler de olabilir ama ben anlaması kolay olması ve yazması kolay oldugu için function içinde yapmayı tercih ettim. Ilk olarak baglantı olusturabilmemiz için gerekli kodları yazalım. private System.Data.OleDb.OleDbConnection Cnn; private System.Data.OleDb.OleDbDataAdapter Da; private System.Data.DataSet Ds; Simdi ürünleri gösterecek bir fonksiyon yazabiliriz. private System.Data.Dataset BannerGetir(string SQLString) { Cnn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db/urunler.mdb")); if (Cnn.State == ConnectionState.Closed) { Cnn.Open(); } Da = new System.Data.OleDb.OleDbDataAdapter(SQLString, Cnn); Ds = new DataSet(); Da.Fill(Ds, "table"); return Ds.Tables(0); } Geriye sadece bu fonksiyonu formdan çagırmak ve AdRotator için ImageUrl ve Navigate url özelligini ayarlamak. Bunun içinde Form yüklenirken (Form_Load) asagıdaki kodları yazarsak AdRotator nesnesi basarılı bir sekilde çalısır. protected void Page_Load(object sender, EventArgs e) { AdRotator1.DataSource = BannerGetir("SELECT * FROM tblUrunler"); string path = "images"; AdRotator1.ImageUrlField = "fldUrunResmi"; AdRotator1.DataBind(); } Evet, çalıstırdıktan sonra sayfa görüntümüz asagıdaki gibidir. Sayfamızı Refresh Edersek Farklı bir ürün geldigini göreceksiniz.. Bir sonraki makalede görüsmek üzere, Herkese basarılar dilerim.
26 Kas 2006 ASP.NET 2.0 ile Mail Gönderme Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0 4 Yorum ASP.NET’ den önce mail göndermek için bir mail componentine(bileşenine) ihtiyaç duyuyorduk. Ama .net ile gelen yenilikler sayesinde herhangi bir componente(bileşene) ihtiyaç duymadan Sadece Mail Sınıfını Projemizde dahil ederek mail gönderme işlemimizi gerçekleştirebiliriz.System.Web.Mail System.Web System System.Web.Mail Altında 6 adet sınıf bulunmaktadır, bu sınıflar CdoNtsHelper CdoSysHelper LateBoundAccessHelper MailAttachment MailMessage SmtpMail Evet sınıfımızı tanıdıktan sonra mail atma isleminin nasıl yaptıgına geçelim. Bunun için Visual Studio .net'i açalım ve yeni bir web projesi olusturalım. Projemize 5 adet label, 4 adet textbox, 1 adet de buton ekliyoruz. Daha Sonra formumuzu kendimize göre dizayn edelim. Benim yapmıs oldugum Form Tasarımı asagıdaki gibidir. Formumuz olusturduktan sonra artık mailimizi gönderme islemimize geçebiliriz. Bunun için ilk yapmamız gereken System.Web.Mail Sınıfını projemize eklememiz gerekir. using System.Web.Mail; Evet projemize Mail sınıfımızı ekledigimize göre artık mail göndermek için gerekli voidimizide yazabiliriz. Not= Mail gönderme islemini bir void seklinde olusturarak farklı sayfalarda kullanabiliriz. System.Web.Message message ; public void SendMesaj(string MessageFrom, string MessageTo, string MessageSubject, string MessageBody) { message.From = MessageFrom; message.To = MessageTo; message.Subject = MessageSubject; message.Body = MessageBody; try { lblUyari.Text = "Mail Gitti"; SmtpMail.Send(message); } catch (Exception ex) { lblUyari.Text = "Mail Gönderirken Bi Problem Olu?tu:" + ex.Message; } } Maili göndermek için gerekli voidi olusturduktan sonra butona ait event'a gidip sadece bu voidi oradan çagırmak kalacak. protected void btnGonder_Click(object sender, EventArgs e) { SendMesaj(txtGonderen.Text, txtAlici.Text, txtKonu.Text, txtMesaj.Text); } Evet kodumuzu tamamladıktan sonra ilk mailimizi gönderelim, web projemizi çalıstıralım bilgileri girelim ve mailimizi gönderelim. Gönder butotuna tıklıyoruz ve sonuç asagıda. Evet simdi mail kutumuza gidelim ve mailin gelip gelmedigini kontrol edelim Görüldügü gibi mailimiz basarı ile gönderilmistir. Evet arkadaslar bir sonraki makalemizde görüsmek üzere. Umarım Faydalı bir makale olmustur. Herkese Basarılar diliyorum.
26 Kas 2006 DATALİST İLE NUMERİC BAZLI SAYFALAMA Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0ASP.NET 4.0 7 Yorum Merhaba arkadaşlar bu makalemde Datalist nesnesinde Numeric(1.2.3...) bazlı sayfalamanın nasıl yapılacağına bakacağız. Datalist ve Repeater nesnelerin de görüntülenecek kayıt sayısının çok fazla oldugu durumlar da kayıtlarımızı sayfalama ihtiyacı duyarız. Bu bize kayıtların daha hızlı görüntülenmesini saglar ve aynı zamanda kullanıcıya gösterilmek istenilen bilgi daha derli toplu gösterilir. Ben bu makalede sayfaları Numeric olarak listeletecegim ve gitmek istedigimiz sayfaya tıkladıgımızda o sayfaya gidebilecegiz. Örnek vermek gerekirse google' da "sem göksu" diye arama yaptıgımızda sayfaların Numeric olarak listelendigini görecegiz. Ön bilgiyi verdikten sonra makalemize baslayabiliriz. Bunun için projemize ilk olarak bir adet Datalist nesnesi ekleyelim. Datalist nesnesinde ben Northwind database'deki Customers tablosunu kullanacagım. Datalist nesnesi içerisinde de CustomerID, CompanyName ve ContactName Fieldlerini görüntüleyecegim. Benim düzenlemis oldugum Datalist Nesnesinin son hali asagıdaki gibidir; DatalistNesnesinin HTML Kodları; <asp:DataList ID="DataList1" runat="server" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" Font-Names="Verdana" Font-Size="X-Small" GridLines="Horizontal" RepeatLayout="Flow"> <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> <SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> <ItemTemplate> <table border="0" cellpadding="0" cellspacing="0" style="width: 392px"> <tr> <td style="width: 129px; height: 19px"> <asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="Small" Text="Customer ID"></asp:Label></td> <td style="width: 17px; height: 19px"> :</td> <td style="width: 300px; height: 19px"> <asp:Label ID="lblCustomerID" Text=’<%# DataBinder.Eval(Container.DataItem,"CustomerID") %>’ runat="server" Font-Names="Tahoma" Font-Size="Small"></asp:Label></td> </tr> <tr> <td style="width: 129px; height: 19px"> <asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="Small" Text="Company Name"></asp:Label></td> <td style="width: 17px; height: 19px"> .</td> <td style="width: 300px; height: 19px"> <asp:Label ID="lblCompanyName" runat="server" Text=’<%# DataBinder.Eval(Container.DataItem,"CompanyName") %>’ Font-Names="Tahoma" Font-Size="Small"></asp:Label></td> </tr> <tr> <td style="width: 129px; height: 19px"> <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="Small" Text="Contact Name"></asp:Label></td> <td style="width: 17px; height: 19px"> :</td> <td style="width: 300px; height: 19px"> <asp:Label ID="lblContactName" runat="server" Font-Names="Tahoma" Text=’<%# DataBinder.Eval(Container.DataItem,"ContactName") %>’ Font-Size="Small"></asp:Label></td> </tr> <tr> <td style="width: 129px; height: 19px"> </td> <td style="width: 17px; height: 19px"> </td> <td align="right" style="width: 300px; height: 19px"> </tr> </table> </ItemTemplate> <AlternatingItemStyle BackColor="#F7F7F7" /> <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> <ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> <EditItemTemplate> </EditItemTemplate> </asp:DataList> Simdi datalistimizi görüntüleyecegimiz bir void yazalım. protected string ConnectionDegiskeni() { //Connection String return "Data Source=.; Initial Catalog=Northwind; uid=sa; pwd="; } protected void DatayiDoldur() { Baslangic = Convert.ToInt32(txtStart.Text); BaslangicKaydi = (Baslangic * SayfadakiKayitSayisi) - SayfadakiKayitSayisi; SqlConnection Cnn = new SqlConnection(ConnectionDegiskeni()); Cnn.Open(); SqlDataAdapter Da =new SqlDataAdapter("Select * From Customers", Cnn); DataSet Ds = new DataSet(); Da.Fill(Ds, BaslangicKaydi, SayfadakiKayitSayisi, "Customers"); DataList1.DataSource = Ds.Tables[0].DefaultView; DataList1.DataBind(); Cnn.Close(); } Daha Sonra bu void'i Formun load'da çagıralım. protected void Page_Load(object sender, EventArgs e) { DatayiDoldur(); } Evet projemizi çalıstırdıgımızda tüm verilerin ekrana geldigini ve verilerin yavas yüklendigini göreceksiniz. Evet kayıtlarımızı listeledikten sonra artık sayfalam islemine geçebiliriz. Bunun için datalistimizin altına bir adet label alalım ve text özelligini bosaltalım. Bu label üzerinde numeric degerleri gösterecegiz. (1 | 2 | 3 | 4 .. gibi) Projemize bir adet textbox ekleyelim adını txtStart yapalım ve visible özelligini false yapalım. Bu textbox içerisinde sayfa sayısını saklayacagız. Code kısmına geçip asagıdaki degiskenleri tanımlayalım. private int Baslangic=1; // Görüntülenecek olan Sayfanın numarası private int SayfadakiKayitSayisi = 4;//Sayfada görüntülenecek olan kayıt sayısı private int BaslangicKaydi;//Databaseden çekilen datada baslanacak olan kaydın sayısı private int ToplamSayfaSayisi;//Toplam sayfa sayısı private int ToplamKayitSayisi()// Toplam kayıt sayısını geri döndüren bir fonksiyon yazarız. { SqlConnection Cnn = new SqlConnection(ConnectionDegiskeni()); Cnn.Open(); SqlCommand myComm =new SqlCommand("Select Count(*) From Customers", Cnn); int GeciciKayitSayisi = Convert.ToInt32(myComm.ExecuteScalar()); Cnn.Close(); return iTempRecordCount; } protected void Page_Load(object sender, EventArgs e) { //Toplam Sayfa Sayısı Alınıyor if (ToplamKayitSayisi() % SayfadakiKayitSayisi == 0) //toplam Kayıt Sayısının Sayfadaki Kayıt sayısına göre modunu alırız. Eger tam sonuç verirse Toplam kayıt sayısına, Sayfadaki Kayıt Sayısını bölmesi yeterli olur ancak tam sonuç vermezse sayfa sayısı 1 eksik çıkar bunu önlemek için ToplamSayfaSayisi'nı 1 arttırırız. { ToplamSayfaSayisi = ToplamKayitSayisi() / SayfadakiKayitSayisi; } { ToplamSayfaSayisi = ToplamKayitSayisi() / SayfadakiKayitSayisi + 1; } DatayiDoldur(); // Datayı ekrana getiririz. if (!Page.IsPostBack) { // Numeric Sayfalama Bilgileri Olusturuluyor int i; for (i = 1; i <= ToplamSayfaSayisi; i++) { Label5.Text = Label5.Text + "<a href=default.aspx?sayfa=" + i + ">" + i + "</a>|"; //Label5 içerisine 1 den Toplam Sayfa Sayısına Kadar numeric degerler olusturuluyor. Sayıları olusturuyoruz ve bu sayılara link veriyoruz. Link yine aynı sayfaya gidiyor ve sayfa adında bir querystring içerisinde sayfaya ait degeri gönderiyor. } try { //olusturulan numeric degerin gönderdigi querystring’e göre o sayfaya gidiliyor Baslangic = int.Parse(Request.QueryString["sayfa"].ToString()); // burada queryden gelen degeri alıyoruz txtStart.Text = Baslangic.ToString(); DatayiDoldur();//data yenileniyor } Catch //sayfa ilk açıldıgında querystring bos olacagından hata vermemesi için ve ilk kayıttan baslaması için basalangic degiskenine 1 degerini atarız. { Baslangic = 1; } } Bilgiler(); } // Yaptıklarımızı daha iyi anlamak için forma 4 adet label ekleyelim ve asagıdaki voidi yazalım.daha sonra voidimizi form_Load da çagıralım. protected void Bilgiler() { //Konuyu daha iyi anlamak için kullandıgımız degiskenleri ekrana bastık lblBaslangicKaydi.Text = BaslangicKaydi.ToString(); lblGoruntulenecekKayitSayisi.Text = SayfadakiKayitSayisi.ToString(); ; lblToplamKayitSayisi.Text = ToplamKayitSayisi().ToString(); lblToplamSayfaSayisi.Text = ToplamSayfaSayisi.ToString(); } Numeric Sayfalama islemini tamamladık ve artık yaptıgımız sayfayı görelim (: Evet 5 numaralı sayfayatıklayalım ve o sayfaya gidelim. Madem Google örnegini verdik, Önceki ve sonraki butonlarınıda ekleyelim (: Sayfamıza 2 adet link buton ekleyelim ve Text özelliklerini Önceki ve Sonraki olarak belirleyelim. protected void lblOnceki_Click(object sender, EventArgs e) { // Önceki kayda gider if (Baslangic > 1) { Baslangic = Baslangic - 1; txtStart.Text = Baslangic.ToString(); DatayiDoldur(); Label4.Text = ""; Bilgiler(); } } protected void lbSonraki_Click(object sender, EventArgs e) { // Sonraki kayda gider if (Baslangic < ToplamSayfaSayisi) { Baslangic = Baslangic + 1; txtStart.Text = Baslangic.ToString(); DatayiDoldur(); Label4.Text = ""; Bilgiler(); } } Son kez projemizi çalıstıralım ve sonucu görelim. Bu makalenin de sonuna geldik baska bir makalede görüsmek dilegiyle, basarılar dilerim. Sem GÖKSU MCP | MCAD.NET askisem@hotmail.com Not: Selçuk Yavuz'un yazmıs oldugu Datalist ile Sayfalama makalesi bu makaleye kaynak olmustur. Diger Kaynaklar; Codeproject - Paging with Repeater control in ASP.NET
26 Kas 2006 ASP.NET 2.0 ile Localization (Yerelleştirme) Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0 2 Yorum Merhaba arkadaşlar bu makalemizde ASP.NET içerisinde Localization (Yerelleştirme) işleminin nasıl yapıldığına göz atacağız. Localization Farklı kültür özelliklerine göre tasarlanmış web siteleri oluşturmamıza sağlayan Framework’un bir özelliğidir.Visual Studio da Localization Visual Studio 2005 herhangi bir Kaynak dosyası (Resource file *.resx) içinde herhangi bir kaynagı eklememize ve düzenlememize izin veren yeni bir kaynak editörü sundu. Web formumuz dizayn zamanındayken(Design time) basit adımlarla yeni kaynak dosyaları olusturmamızı saglıyor. Bu kaynak dosyaları, içerisinde ekleyecegimiz özelliklerin kullanıcı kültür özelliklerine göre sayfaya uygulanmasını saglar. Kaynak editörü bir grid gibidir. Name, value ve comment olmak üzere 3 sütundan olusur. Name belirleyecegimiz kaynagın adını, value kaynakta görüntüleyecegimiz degeri ve comment'de açıklama satırıdır. Visual studio 2005 WebForm'larını Localize etmek için 2 yol sunar. Birincisi Lokal kaynaklar (Local Resources), ikinciside Global kaynaklar(Global Resources). Lokal kaynak dosyalarında, kaynak dosyalar asp.net sayfaları içerisine eklenir. Global kaynaklarda ise ortak ayarların tutuldugu tek bir kaynak dosya olusturulur. Kısaca özetlersek; Web Uygulamaları için kaynak dosyaları olusturmamızı, Kaynaklara erismek için Çalısma zamanında yeni tanımlamalar yapmamızı, Kullanıcı istekleri için geçerli kültür özelliklerini otomatik olarak uygulamamızı saglar. (Tarih-saat, para birimi, web formlardaki bilgiler) Özellikle çok uluslu firmalar için düsünürsek, örnegin Microsoft için her dil için ayrı ayrı uygulama gelistirmek hem zaman kaybı hemde gereksiz is yüküdür. Bu durumda local kaynak dosyalarını kullanarak uygulamanın çalısacagı kültür özelliklerine gore tarih-saat, para birimi, kullanıcı formlarındaki bilgilerin vb. gibi bilgilerin otomatik olarak ayarlanmasını saglayabiliriz. Küçük çaplı projeler için düsünürsek projeyi compile etmeden kaynak dosyaları degistirerek site üzerinde güncelleme islemleri yapılabilir. Örnek Uygulama Localization özelliklerini anlatan bir örnek yapalım. Örnegimizde Tarih-saat, para birimi ve kullanıcı ara yüzlerini dil seçeneklerine göre otomatik olarak uygulandıgını görecegiz. Ilk olarak visual studio 2005 içinde Localize Adında bir proje açalım. Açılan web formumuza bir adet label ekleyelim. Text özelligini silelim ve adını lblHosgeldiniz olarak belirleyelim. Daha sonra Solution Explorerdan, Add Asp.NET Folder diyerek projemize Local Kaynak klasörü ekleyelim. Bu klasör üzerinde sag tıklayarak projemize bir adet kaynak dosyası ekleyelim ve adını "default.aspx.resx" olarak belirleyelim. Açılan sayfa da kaynagımızın adı(name) ve içerisinde tutacagımız deger saklanacaktır(Value). Kültür özelliklerimiz Türkçe oldugunu için bu kaynak dosyası içerisine Türkçe bilgiler girecegiz. Evet, simdi Ingilizce için kaynak dosyamızı olusturalım adını "default.aspx.en.resx" yapalım ve özelliklerimizi belirleyelim. Kültür özelliklerimizi belirledik. Simdi web formumuza gidip sayfamızın Kültür ayarlarını yapalım. <Page Language ="VB" AutoEventWireup ="false" CodeFile ="Default.aspx.vb" Inherits ="_Default" Culture="Auto" UICulture="Auto" > <! 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 > Untitled Page</ title > </ head > < body > < form id ="form1" runat ="server"> < div > < asp : Label ID ="lblHosgeldiniz" runat ="server" Font-Names ="Verdana" Font-Size ="X-Large" meta:resourceKey="lblHosgeldiniz"></ asp : Label >< br /> < br /> </ div > </ form > </ body > </ html > Ilk olarak kültür özelliklerini Auto özelligi verdik. Label'ın meta:resourcekey özelligini belirttik. Simdi sayfamızı çalıstırabiliriz. Evet sayamızı çalıstırdık ve "Selam Türk" Diye Bizi Karsıladı. Simdi sayfamızın dil ayarını ingilizce yapalım. Sayfamızı Refresh edelim. Karsılama mesajı bu kez "Selam Ingiliz" oldu. Projemizi biraz daha genisletelim. Sayfamıza bir adet DropdownList, bir adet calendar ve bir adet label ekleyelim. Dropdown içerisinde Dil seçenekleri olacak ve seçtigimiz dile göre de Tarih-Saat, Para Birimi, ve Karsılama Mesajı degisecek. Dropdown dilleri ekleyelim. < asp : DropDownList ID ="DropDownList1" runat ="server" AutoPostBack ="True" OnSelectedIndexChanged ="DropDownList1_SelectedIndexChanged" meta : resourcekey ="DropDownList1Resource1"> < asp : ListItem Selected ="True" Value ="Auto" Text ="Lütfen Dil Seçiniz"></ asp : ListItem > < asp : ListItem Value ="Auto" Text ="Türkçe"></ asp : ListItem > < asp : ListItem Value ="en-US" Text ="Ingilizce"></ asp : ListItem > < asp : ListItem Value ="fr-FR" Text ="Fransızca"></ asp : ListItem > < asp : ListItem Value ="ar-EG" Text ="Arapça"></ asp : ListItem > </ asp : DropDownList > < asp : DropDownList ID ="DropDownList1" runat ="server" AutoPostBack ="True" OnSelectedIndexChanged ="DropDownList1_SelectedIndexChanged" meta : resourcekey ="DropDownList1Resource1"> < asp : ListItem Selected ="True" Value ="Auto" Text ="Lütfen Dil Seçiniz"></ asp : ListItem > < asp : ListItem Value ="Auto" Text ="Türkçe"></ asp : ListItem > < asp : ListItem Value ="en-US" Text ="Ingilizce"></ asp : ListItem > < asp : ListItem Value ="fr-FR" Text ="Fransızca"></ asp : ListItem > < asp : ListItem Value ="ar-EG" Text ="Arapça"></ asp : ListItem > </ asp : DropDownList > Ekledigimiz label içerisinde de para degerini tutacak kodumuzu yazalım. Burada da kültür özelliklerine göre para formatı ve para birimi gelecek. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim parabirimi As Double = 575757.57 Label1.Text = String.Format("{0:c}", parabirimi) End Sub Dropdownd da listeledigimiz dillerden seçtigimiz dile göre istedigimiz ayarları vermesini isteyelim. Bunun için InitializeCulture() metodunu ezelim. Protected Overrides Sub InitializeCulture() Dim dil As String = Request("DropDownList1")' dropdowndan gelen deger If String.IsNullOrEmpty(dil) Then dil = "Auto" ' eger dil bossa otamatik olarak belirle UICulture = dil Culture = dil End Sub Simdi Dropdownumuzda Dil Seçimi yapıldıgında çalısacak kodu yazalım. Burada Seçilen Dile Göre InitializeCulture() metodu çalısacak ve seçilen dile göre Kültür özelliklerini uygulacak. Projemizi çalıstıralım. Simdi dillerden ingilizce Seçelim. Listeden bu kezde Arapçayı seçelim. Evet, Arapça seçenegini seçtik ve sayfamızın Arapça kültür ayarlarına geldigini gördük. Bu sekilde tüm kullanıcı ekranlarımızı kaynak dosyalarımız içerisinden belirleyebilir çok kolay bir sekilde projemize birçok dil seçenegi ile çalısma imkânı saglayabiliriz. Bu makalenin de sonuna geldik, baska bir makalede görüsmek üzere basarı ve iyi günler dilerim. Sem GÖKSU MCP | MCAD.NET | MCTSKaynaklarhttp://msdn.com http://www.codeproject.com http://aspalliance.com