27 Mar 2007 ASP.NET Custom Control Geliştirme – Karakter Sayan Textbox Kategori: ASP.NET Etiketler: ASP.NETC# 5 Yorum Merhaba arkadaşlar, custom controller dizisi makalesine textbox içerisine girilen karakterleri sayacak ve bu textbox’ı limitlendirecek yeni bir kontrol yazacağız…Karakter Sayan Textbox Bazı durumlarda textbox içerisine girilecek karakter sayısı bizim için önemli olabilir. Bu durumlar da textbox içerisindeki karakter sayısını kontrol edip kaç karakter girdigimizi kontrol etmemiz gerekir. Örnegin firmamız için bir sms gönderme programı yazıyorsak bu bizim için çok önemlidir. Toplu sms gönderimi yaparken kullanıcılara gönderilecek sms'in tek seferde yani en fazla 160 karakter girilerek gönderilmesi gerekir. Iste biz bu sorunu çözmek için hem limitlenen hemde karakter sayan bir textbox yazacagız. Ilk olarak yeni bir web control library projesi olusturalım. Evet, projemizi olusturduktan sonra kodlamaya baslıyalım. using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace SemControls { //Ilk olarak toolbox'da kontrolümüze verilecek ismi belirliyoruz.. [DefaultProperty("Text")] [ToolboxData("<{0}:SemLimitliTextbox runat=server></{0}:SemLimitliTextbox>")] public class SemLimitliTextbox : WebControl { string _KarakterLimiti; string _Text; // Kontrol olusturulurken textbox içerisindeki karakteri sayacak ve bunu sınırlandıracak olan javascript kodunu yaziyoruz. protected override void OnInit(EventArgs e) { string script = ""; script += "<script language=\"javascript\">"+System.Environment.NewLine; script += "function textCounter(field, countfield, maxlimit)" + System.Environment.NewLine; script += "{if (field.value.length > maxlimit) field.value = field.value.substring(0, maxlimit);" + System.Environment.NewLine; script += "else countfield.value = maxlimit - field.value.length; }" + System.Environment.NewLine; script += "</script>"; if (!this.Page.IsClientScriptBlockRegistered("SemLimitedTextbox")) { this.Page.RegisterClientScriptBlock("SemLimitedTextbox", script); } } // Property penceresine LimitliTextbox grubu altında karakterLimiti adında yeni bir özellik ekliyoruz. Bu bizim textboxımızı limitlendirecek [Category("LimitliTextbox")] [Browsable(true)] [Description("Textbox'a kaç karakter girilsin?")] public string KarakterLimiti { get { return _KarakterLimiti; } set { _KarakterLimiti = value; } } // Property penceresine LimitliTextbox grubu altında Text adında yeni bir özellik ekliyoruz. Bu bizim textboxımızın text özelligi olacak. [Category("LimitliTextbox")] [Browsable(true)] [Description("Textbox'ın Text'i")] public string Text { get { return _Text; } set { _Text = value; } } //Simdi kontrolümüzü olusturuyoruz. protected override void Render(HtmlTextWriter writer) { try { string LimitedTextbox = ""; LimitedTextbox += "<textarea rows=3 name=LimitliTextbox onKeyDown=\"textCounter(this.document.all.LimitliTextbox,this.document.all.KarakterSayisi,"+KarakterLimiti+");\""; LimitedTextbox += "onKeyUp=\"textCounter(this.document.all.LimitliTextbox,this.document.all.KarakterSayisi," + KarakterLimiti + ");\" cols=38 tabindex=5>"+Text+"</textarea>"; LimitedTextbox += "<br/>"; LimitedTextbox += "<input readonly type=text name=KarakterSayisi size=4 maxlength=3 value=\"" + KarakterLimiti + "\" style=\"font-family: Tahoma; font-size: 8pt; border: 1px solid\">"; LimitedTextbox += "<font color=#6699CC face=Verdana size=1> Karakter Daha Yazabilirsiniz...</font>"; writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.Write(LimitedTextbox.ToString()); writer.RenderEndTag(); } catch { writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.Write("Kontrol Olusturulamadı..."); writer.RenderEndTag(); } } } } Kontrolümüzü olusturduktan sonra; projemize yeni bir web site ekleyelim. Daha sonra Web projesinin referanslarına bu web control libraryi ekleyelim. Simdi toolboxımıza gidelim bakalım kontrol gelmismi? Sem Limitli textbox kontrolü gelmis. Sayfamıza yeni bir SemLimitliTextbox ekliyelim ve özelliklerini ayarlıyalım... Textbox içerisine en fazla 100 karakter girilsin. Simdi web projemizi çalıstıralım. Simdi textbox içerisine birseyler yazalım. Gerçekten de sayıyor. : ) Bu makalemizinde de sonuna geldik. Tesekkür eder iyi çalısmalar dilerim. Sem GÖKSUMCP | MCAD.NET | MCTS | ASP.NET MVP Örnek Kodlar için mail adresimi kullanabilirsinizsemgoksu@semgoksu.com Kaynaklar www.codeproject.com
23 Mar 2007 Ajax Sunumu Kategori: Yazılım Etiketler: ASP.NETASP.NET Ajax 9 Yorum Hazırlamıs oldugum Ajax Sunumunu indirmek için tıklayınız.
16 Mar 2007 XML ve XSLT Kullanarak Dinamik ASP.NET Sayfaları Oluşturmak Kategori: ASP.NET Etiketler: ASP.NET 2 Yorum Merhaba arkadaşlar bu makalemizde Bir XML dökümanı oluşturup, oluşturduğumuz XML dökümanını XSLT ile sitil uygulayıp ASP.NET sayfalarında kullanacağız… Kısaca XML(Extensible Markup Language)XML veri alısverisinde kullanılacak standart bir format olarak kullanılan bir dildir. Uygulamalarımızı farklı platformalara tasımak istedigimizde en iyi çözümdür. XML belgelerine kendi etiketlerinizi ekleyebilir aynı veritabanlarındaki gibi istedigim fieldları gösterebiliriz. Application, dil, isletim sistemi vb. gibi kısıtlamalara baglı degildir. Uygulamalar kendi veri yapılarını tanımlayabilir. Son derece güvenligi oldugu için veri paylasımında yada dagıtımında sürekli kullanılır. Örnek olarak Haberler.XML'i olusturalım;<?xml version="1.0" encoding="utf-8" ?><Haberler> <Haber ID="1"> <Baslik>Sem Göksu MVP Oldu</Baslik> <Tarih>bugünün tarihi iste.</Tarih> <Icerik>Bi tebrigi hakettim J</Icerik> </Haber> <Haber ID="2"> <Baslik>Sem Göksu AJAX Semineri</Baslik> <Tarih>Gelecekte.</Tarih> <Icerik>Bilmemki.</Icerik> </Haber> <Haber ID="3"> <Baslik>Ajax güzel sey</Baslik> <Tarih>Gelecekte.</Tarih> <Icerik>güzel.....</Icerik> </Haber> <Haber ID="4"> <Baslik>Ajax güzel sey 2</Baslik> <Tarih>Gelecekte.</Tarih> <Icerik>güzel.....</Icerik> </Haber> <Haber ID="5"> <Baslik>Ajax güzel sey 3</Baslik> <Tarih>Gelecekte.</Tarih> <Icerik>güzel.....</Icerik> </Haber></Haberler>Simdi bu XML'i açtıgımız da neler olacak bi bakalım :) Ben bir sey anlamadım ziyaretçi nasıl anlasın. Bunu biraz biçimlendirelim. Ama nasıl? Kısaca XSLT(Extensible Stylesheet Language Transformation)Sitemizde haberleri farklı sitelerin de kullanması için XML'e döktük. Ama siteler Xml verisinin farklı bir formata dönüstürülmesini istiyor. XSLT standardı tam bu noktada karsımıza çıkıyor. XSLT, XML içerigine sitiller uygulayarak sayfalarımızın HTML formatına dönüstürülmesini saglar. Ayrıca xml üzerinde sıralama, filtreleme ve gruplama gibi islemler yapabiliriz. Örnek olarak HaberlerSitili.xsl'i olusturalım;<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><h1>Haberlerim...</h1><table border="0" borderColor="gray" cellpadding="0" cellspacing="0" width="700"><tr bgcolor="Yellow" height="20"><td>ID</td><td>Tarih </td><td>Baslık </td><td>Icerik </td></tr><xsl:for-each select="Haberler/Haber"><tr><td><xsl:value-of select="@ID"/></td><td><font size="2" color="Blue"><xsl:value-of select="Baslik"/></font></td><td><b><xsl:value-of select="Tarih"/></b></td><td align="right"><xsl:value-of select="Icerik"/></td></tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>Evet Simdi bu olusturdugumuz XML ve XSLT dökümanlarını birlestirerek HTML gibi bir çıktı alalım. Projemize bir sayfa ekleyelim;Ilk olarak sayfamızın namespacelerine System.XML ve System.XML.XSL'i ekleyelim.Sonra Forlm'un loadıında;VB.NETDim xdoc As New XmlDocument()xdoc.Load(Server.MapPath("haberler.xml"))Dim xsltran As New XslCompiledTransform()xsltran.Load(Server.MapPath("HaberlerSitili.xsl"))xsltran.Transform(xdoc, Nothing, Response.Output)C#NETXmlDocument xdoc = new XmlDocument();xdoc.Load(Server.MapPath("haberler.xml"));XslCompiledTransform xsltran = new XslCompiledTransform();xsltran.Load(Server.MapPath("HaberlerSitili.xsl"));xsltran.Transform(xdoc , null, Response.Output);Simdi sayfaımızı çalıstıralım; Az önceki çirkin XML simdi ne güzel oldu : )Bu makalemizinde de sonuna geldik. Tesekkür eder iyi çalısmalar dilerim. Sem GÖKSUMCP | MCAD.NET | MCTS | ASP.NET MVPÖrnek Kodlar için mail adresimi kullanabilirsinizsemgoksu@semgoksu.com Kaynaklar www.codeproject.com
09 Mar 2007 AJAX ListSearch Extender Kategori: AJAX Etiketler: ASP.NETASP.NET AjaxASP.NET 2.0 1 Yorum Merhaba arkadaslar, bu makalemizde ajax control toolkit’innesnelerinden Ajax ListSearch Extenderi ve özelliklerini inceleyecegiz.ListSearchExtenderList SearchExrender kontrolü ASP.NET Dropdownlist ve Listbox itemleri içinde yazarak aramayapmamizi saglar. Listeleme elemanlari üzerine tiklandiginda Bir uyari mesaji çikarörnegin; arama için birkaç harf giriniz. Bu uyariya sitil verebilir vepozisyonun belirleyebiliriz.Kullanimi<ajaxToolkit:ListSearchExtender id="LSE" runat="server"TargetControlID="ListBox1"PromptText="Type to search"PromptCssClass="ListSearchExtenderPrompt"PromptPosition="Top" /> ÖzellikleriPromptText - Listeleme elemanina tiklandigindagösterilecek olan mesaj PromptCssClass - Uyari mesajina uygulanacak olan sitil adiPromptPosition - Uyari mesajinin gösterilecegi yer. Bottomve Top degerlerini alir.ÖrnekBuanlattiklarimizi bir örnekle devam ettirelim. Örnegimizde Dropdownlist veListbox elemanlarinda arama yapacagiz. Örnegimize baslayalim ve ilk olarak birAJAX Projesi açalim. Simdiolusturdugumuz bu sayfaya 1 adet Dropdownlist ve Listbox ekleyelim. Bukontrollerde arama yapmak için 2 adet de ListSearch Extender ekleyelim. Benimolusturdugum sayfa asagidaki gibidir. Benlisteleme elemanlarina bir miktar item ekledim. Bu elemanlari Databaseden dedoldurabiliriz. Ama suan için buna gerek yok.Simdi ilkolarak Listbox için ListSearch Extenderinin gerekli propertylerini yazalim.<cc1:ListSearchExtender ID="ListSearchExtender2" runat="server"TargetControlID="ListBox1"PromptText="Aramayapmak için yaziniz..." PromptPosition="Top" PromptCssClass="modalPopup"></cc1:ListSearchExtender>Yukarida ="text/css">.modalPopup {background-color:#ffffdd;border-width:2px;border-style:solid;border-color:Gray;padding:0px;}</style>Simdidedropdownlist için ListSearch Extender için gerekli kodlari yazalim. Hiçbir farkyok sadece TargetControlID Propertysini degistirecegiz. <cc1:ListSearchExtender ID="ListSearchExtender1" runat="server"TargetControlID="DropDownList1"PromptText="Aramayapmak için yaziniz..." PromptPosition="Top" PromptCssClass="modalPopup"></cc1:ListSearchExtender>Simdi buyazdiklarimizi test edelim;Simdi aramaiçin bir seyler yazalim; örnegin " Sem " : )Simdi dediger DropdownList' deneyelim;Simdi aramayapmak için bir seyler yazalim;Gerçektençok kullanisli ve ise yarayacak bir kontrol : ) Projelerinizde güle gülekullanin : )Bumakalenin de sonuna geldik, baska bir makalede görüsmek üzere basari ve iyigünler dilerim. SemGÖKSUMCP | MCAD.NET | MCTS | ASP.NET MVPÖrnekKodlar için mail adresimi kullanabilirsinizaskisem@hotmail.comKaynaklar http://ajax.asp.net
08 Mar 2007 ASP.NET Custom Control Geliştirme – Popup Açtıran Button Kategori: ASP.NET Etiketler: ASP.NETC# 0 Yorum Merhaba arkadaşlar, ilk makalemizde diğer web geliştirme editörlerinde olan ama .net toolbox’da olmayan marquee kontrolünü geliştirmiştik. Bu makalemiz de ise farklı bir custom web control geliştireceğiz. Popup Açtıran Button Hemen hemen her web sitesinde kullandıgımız Popup pencereler bizi çok fazla ugrastırır. Her defasında yeni bir javascript olusturup olusturdugumuz javascripti kontrollerin eventlerinde çagırırız. Bu hem bizi çok ugrastırır hemde çok fazla zaman kaybettirir. Iste bu zaman kaybanı önlemek için popup açtıran bir buton gelistirecegiz. Bir button olusturup bu butona tıklandıgında popup pencere açtıracagız. Butonun ve açılacak olan bu pencerenin boyutlarını kullanıcı degistirebilecek. Simdi ilk olarak yeni bir WebControl Library projesi olusturalım. Kodlamaya baslıyalım; using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace PopupButton { [DefaultProperty("Text")] [ToolboxData("<{0}:semPopupButton runat=server>")]//kontrolümüze verilecek olan ID Tabiki kendi adımla baslıyor (: public class semPopupButton : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] //Kontrolümüzün özelliklerini tutacak olan degiskenler string _text; string _windowName; string _windowUrl; string _windowWidth; string _windowHeight; string _buttonWidth; string _buttonHeight; //SemPopupButton adlı bir özellik grubuna eklenecek bu özellik Açılacak olan Window'un URL'ni tutan bir özelliktir. [Category("SemPopupButton"), DefaultValue("WindowUrl"), Description("Açılacak olan Popup Pencerenin URL'i")] public string WindowURL { get { return _windowUrl; } set { _windowUrl = value; } } //SemPopupButton adlı bir özellik grubuna eklenecek bu özellik Açılacak olan Window'un Title'ni tutan bir özelliktir. [Category("SemPopupButton"), DefaultValue("WindowsName"), Description("Açılacak olan Popup Pencerenin Title'i")] public string WindowName { get { return _windowName; } set { _windowName = value; } } //SemPopupButton adlı bir özellik grubuna eklenecek bu özellik Açılacak olan Window'un genisligini tutan bir özelliktir. [Category("SemPopupButton"), DefaultValue("PopupWidth"), Description("Açılacak olan Popup Pencerenin genisligi")] public string WindowWidth { get { return _windowWidth; } set { _windowWidth = value; } } //SemPopupButton adlı bir özellik grubuna eklenecek bu özellik Açılacak olan Window'un yüksekligini tutan bir özelliktir. [Category("SemPopupButton"), DefaultValue("WindowHeight"), Description("Açılacak olan Popup Pencerenin yüksekligi")] public string WindowHeight { get { return _windowHeight; } set { _windowHeight = value; } } //SemButton adlı bir özellik grubuna eklenecek bu özellik butonun textini tutan bir özelliktir. [Category("SemButton"), DefaultValue("TextName"), Description("Butonn Text Özelligi")] public string Text { get { return _text; } set { _text = value; } } //SemButton adlı bir özellik grubuna eklenecek bu özellik butonun genisligini tutan bir özelliktir. [Category("SemButton"), DefaultValue("ButtonWidth"), Description("Butonun Genisligi")] public string ButtonWidth { get { return _buttonWidth; } set { _buttonWidth = value; } } //SemButton adlı bir özellik grubuna eklenecek bu özellik butonun yüksekligini tutan bir özelliktir. [Category("SemButton"), DefaultValue("ButtonHeight"), Description("Butonun Yüksekligi")] public string ButtonHeight { get { return _buttonHeight; } set { _buttonHeight = value; } } protected override void RenderContents(HtmlTextWriter writer) { try { string popupButton; catch { writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.Write("Popup Pencere..."); writer.RenderEndTag(); } } } } Kodumuzu tamamladık simdi testing için projemize bir web site ekleyelim. Ekledikten sonra Web Site'in referanslarına Projects sekmesinden WebControl Libraryi ekleyelim. Simdi toolbox'a bakalım eklenmismi (: Kontrolümüz eklendi Simdi sayfamıza ekleyelim. Simdi özelliklerimizi ayarlayalım. Evet olusturdugumuz özellik grupları geldi. Ve biz özelliklerimizi yazdık. Simdi projeyi çalıstıralım. Ve butona tıklayalım (: Bu makalemizinde de sonuna geldik. Tesekkür eder iyi çalısmalar dilerim. Sem GÖKSU MCP | MCAD.NET | MCTS | ASP.NET MVP Örnek Kodlar için mail adresimi kullanabilirsiniz semgoksu@semgoksu.com Kaynaklar www.codeproject.com