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
08 Mar 2007 ASP.NET Custom Control Geliştirme – Marquee Kontrolü Kategori: ASP.NET Etiketler: ASP.NET 4 Yorum Merhaba arkadaşlar, bu makalemizde diğer web geliştirme editörlerinde olan ama .net toolbox’da olmayan bir web controlünün nasıl geliştirildiğine bakacağız.ASP.NET Custom Control Gelistirme - Marquee Kontrolü Visual Studio da kullanılabilir kontol sayısı çok fazla olsada bazı durumlar da visual studio toolbox'ında yer almayan bir kontrol gerekebilir. Bu durum da geriye 2 seçenek kalır. Ya dısarıdan 3th party bir component satın almalıyız. Yâda kendi kontrolümüzü kendimiz gelistirmeliyiz. Dısarıdan satın almak hem maliyetli bir istir hemde alacagımız kontol bizim isimizi tam olarak görmeyebilir. Ayrıca gelistirmek istedigimizde yine ücret ödememiz gerekebilir. Buda hem biz yazılımcıların hemde firmaların isine gelmez. Bu durumu çözmek için kendi kontrolümüzü kendimiz gelistirebiliriz. Visual studio ile kendi kontrolümüzü gelistirip istedigimiz gibi kullanabiliriz istedigimiz gibi gelistirebiliriz. Kendi kontrollerimizi gelistirebilmemiz için visual studio WebControlLibrary'yi sundu(Aynı islemleri Class Library ile de yapabiliriz). Simdi ilk olarak WebControlLibrary'de bize lazım olacak metodları tanıyalım. Render Methodu Olusturacagımız Custom kontrolü çalıstırdıgımızda tüm islemler render metodunda gerçeklesecektir. Render metodu Web Browser'da kontrolleri görüntülemek için HTML olarak output edecektir. Otomatik olarak sayfayı Host eden sayfayı HtmlTextWriter ile HTML'e çevirecektir. Aynı Clasik ASP de olan Response.write gibi. Design-Time Destegi Olusturacagımız nesneye ait özellikleri belirleyecegimiz kısımdır. Kontrol'e design-time özelligi eklemek için property'ler ve class'lar tanımlanır codun içine dahil edilir. [Category("ÖzellikAdi"), DefaultValue(""), Description("Açıklama")] Attributes Category Appearance Behavior Data Description Belirlenecek olan property ile ilgili açıklama. DefaultValue Kendi degerimiz. Browsable Property'nin property box içinde gösterilip gösterilmeyecegine karar verir. Alacagı degerler. true yada false Kontrolü kullanmak Olusturacagımız kontrolü olusturmak için WebControlLibrary'i Build ettikten sonra olusacak olan dll'i kendi toolbox'mızda sag tıklayarak Choose Items seçenegini seçerek ekleyebiliriz. Örnek: Ben örnek olarak Visual Studio içerisinde yer almayan ama web sayfalarında çok ise yarayan Marquee(kayan yazı) kontrolünü gelistirecegim. Ilk olarak yukarıda da anlattıgım gibi WebControlLibrary olusturalım. Projemizi olusturduktan sonra Kodumuzu inceleyelim. namespace CustomControl { [DefaultProperty("Text")] [ToolboxData("<{0}:WebCustomControl1 runat=server>")] // Kontrolümüzün Sayfaya eklendiginde belirlenecek olan ID'si public class WebCustomControl1 : WebControl { [Bindable(true)] [Category("Appearance")] //propertyleri [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"]; return ((s == null) ? String.Empty : s); } set { ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter output)//Kontrolümüzün output edilecegi render metodu. { output.Write(Text); } } } Simdi projemize devam edelim. Ilk olarak Kontrolümüzün adını SemMarquee yapalım. namespace Marquee { [DefaultProperty("Text")] [ToolboxData("<{0}:SemMarquee runat=server>")] public class SemMarquee : WebControl { Propertieslerimiz için açıklamayı yapalım. [Category("Appearance")] [Browsable(true)] [Description("Kayan Yazı içerigi")] [Editor(typeof(System.Web.UI.Design.TextControlDesigner), typeof(System.Drawing.Design.UITypeEditor))] Simdi property penceremize eklemek istedigimiz özellikleri yazalım string _text; string _width; string _height; public string MarqueeText //marque içerisinde kaydırılacak olan yazı resim vs.. { get { return _text; } set { _text = value; } } public string MarqueeWidth //marwuenin genisligi { get { return _width; } set { _width = value; } } public string MarqueeHeight //marwuenin yüksekligi { get { return _height; } set { _height = value; } } Simdi render edilecek olan marquee'yi yazalım. protected override void RenderContents(HtmlTextWriter writer) { try { catch { writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.Write("Kayan Yazı"); writer.RenderEndTag(); } } } } Evet, Kontrolümüzü olusturduk Simdi bunu bir web site içerisinde kullanalım. Bunun için var olan projemize bir web site ekleyelim. Simdi ekledigimiz web site'in referanslarına gelip olustugumuz class library'i ekleyelim. Simdi toolbox'ımıza göz atalım. Marquee controlümüz toolbox'a eklendi. Simdi bunu formumuza ekleyelim ve özelliklerini belirleyelim. Simdi projemizi çalıstıralım. Biraz bekleyelim tekrar bakalım; Evet çok güzel oldu gerçekten. Artık bizimde bir Custom Web controlümüz var. 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
04 Mar 2007 ASP.NET İle Stored Procedure Kullanımı – 2 Kategori: ASP.NET Etiketler: ASP.NETSQL ServerADO.NET 2 Yorum Merhaba arkadaşlar, bu makalemizde ASP.NET İle SQL Server üzerinde Insert, Update ve Delete işlemleri yapan Stored Procedureleri oluşturup, oluşturduğumuz store procedurleri ASP.NET Projemizde kullanacağız…Bir önceki makalemizde Bize datayı listeleyen Stored Procedure olusturup bunu ASP.NET içinde kullanmıstık. Bu makalemizde ise Ekleme, Çıkarma ve Güncelleme Stored Proc. Ekleyecek ve bunu asp.net sayfalarında kullanacagız. Insert: Tablumuza Kayıt ekliyoruz. Not: Person.Contact Tablosuna kayıt eklemek için Allov null alanları seçili olmayan fieldları seçelim. SP'yi düzgün yazsak bile çalısmayacaktır. Create Proc InsertPerson @FirstName varchar(20), @LastName varchar (20) as Insert Into Person.Contact (FirstName,LastName) values (@FirstName, @LastName) Sp'mizi Test edelim.. InsertPerson 'sem','göksu' // Bakalım Eklemismi ? Simdi bu islemi ASP.NET tarafında da yapalım. Olusturmus oldugumuz projeye yeni bir sayfa ekleyelim ve sayfamız üzerine 2 textbox ve 1 button ekleyelim. Button'un Click eventine asagıdaki kodları yazalım; protected void Button1_Click(object sender, EventArgs e) { try { Cnn = new SqlConnection("Data Source=localhost; Initial Catalog=AdventureWorks; trusted_connection=yes"); Cmd = new SqlCommand(); Cmd.CommandType = CommandType.StoredProcedure; Cmd.CommandText = "InsertPerson"; Cmd.Parameters.AddWithValue("@FirstName", TextBox1.Text); Cmd.Parameters.AddWithValue("@LastName", TextBox2.Text); Cmd.Connection = Cnn; if (Cnn.State == ConnectionState.Closed) Cnn.Open(); int result = Cmd.ExecuteNonQuery(); Response.Write(result.ToString() + " Kayıt Eklendi..."); } catch (Exception ex) { Response.Write(ex.Message); } } Insert islemimizi tamamladık simdi Update Islemine geçebiliriz. Update: Varolan bir kaydı güncelliyoruz. Create Proc UpdatePerson @ExFirstname varchar(20), @NewFirstname varchar(20) as Update Person.Contact Set FirstName = @NewFirstname where FirstName=@ExFirstname Test edelim; UpdatePerson 'Crystal','Penguen' (22 row(s) affected) > 22 tane Firstname'i Crystal olan kayıt person ile degistirildi. Simdi Asp.net tarafını yazalım; Yeni Bir sayfa ekleyelim ve sayfamıza 2 textbox ve 1 button girelim. 1. textbox'a güncellenecek olan Firstname'i ve 2.textbox'ada yeni degeri girecegiz. Buton ile de islemi gerçeklestirecegiz. Button'un click eventine asagıdaki kodları yazalım; protected void Button1_Click(object sender, EventArgs e) { try { Cnn = new SqlConnection("Data Source=localhost; Initial Catalog=AdventureWorks; trusted_connection=yes"); Cmd = new SqlCommand(); Cmd.CommandType = CommandType.StoredProcedure; Cmd.CommandText = "UpdatePerson"; Cmd.Parameters.AddWithValue("@ExFirstname", TextBox1.Text); Cmd.Parameters.AddWithValue("@NewFirstname", TextBox2.Text); Cmd.Connection = Cnn; if (Cnn.State == ConnectionState.Closed) Cnn.Open(); int result = Cmd.ExecuteNonQuery(); Response.Write(result.ToString() + " Kayıt güncellendi..."); } catch (Exception ex) { Response.Write(ex.Message); } } Hemen test edelim; Sp'yi test ederken Firstname'i Crystal olan kayıtları penguen ile degistirmistim. Simdi yeniden eski degeri ile update etmis oldum. 22 adet kaydın güncellendigini görüyoruz. Delete: Tablomuzdan kayıt siliyoruz. Stored Proc. Olusturalım. Not: Eger Sizde benim kullandıgım gibi Person.Contact tablosunu kullanacaksanız tablo Üzerindeki Foreign keyleri kaldırın. Yoksa kayıtları silemeyeceksiniz. create proc DeletePerson @Firstname varchar(20) as Delete from Person.Contact where FirstName = @Firstname SP'yi test edelim. DeletePerson 'Gustavo' (2 row(s) affected) > Gustavo adın da 2 kaydı sildi.. Simdi son olarak da bunun asp.net tarafını yapalım. Yeni bir sayfa ekleyelim ve sayfamıza 1 textbox ve 1 button ekleyelim. Daha sonra butonun click eventine asagıdaki kodları yazalım; protected void Button1_Click(object sender, EventArgs e) { try { Cnn = new SqlConnection("Data Source=localhost; Initial Catalog=AdventureWorks; trusted_connection=yes"); Cmd = new SqlCommand(); Cmd.CommandType = CommandType.StoredProcedure; Cmd.CommandText = "DeletePerson"; Cmd.Parameters.AddWithValue("@Firstname", TextBox1.Text); Cmd.Connection = Cnn; if (Cnn.State == ConnectionState.Closed) Cnn.Open(); int result = Cmd.ExecuteNonQuery(); Response.Write(result.ToString() + " Kayıt silindi..."); } catch (Exception ex) { Response.Write(ex.Message); } } Testimizi yapalım; Firstname'i "Sem" olan 5 kayıt vardı ve biz bunu stored procedurumuzü çalıstırarak sildik.. Bu makalenin de sonuna geldik, Baska bir makalede görüsmek üzere basarı ve iyi günler dilerim. Sem GÖKSUMCP | MCAD.NET | MCTS Örnek Kodlar için mail adresimi kullanabilirsiniz semgoksu@semgoksu.com Kaynaklar http://msdn.com
04 Mar 2007 ASP.NET İle Stored Procedure Kullanımı – 1 Kategori: ASP.NET Etiketler: ASP.NETSQL Server 2005SQL Server 0 Yorum Merhaba arkadaşlar, bu makalemizde ASP.NET İle SQL Server üzerinde Stored Procedure oluşturup, oluşturduğumuz stored procedurü ASP.NET Projemizde kullanacağız…Stored Procedure Nedir?Ilk olarak kısaca Stored Procedürden bahsedeyim; Stored Procedures SQL Server üzerinde tutulan T-SQL ifadeleridir. Belli bir görevi yerine getirebilmek amacıyla yapılandırılırlar. SQL Server üzerinde derlenirler. Belirledigimiz sartlara göre, program içinden çagrılarak kullanılırlar. T-SQL deyimleriyle yazılan Store Procedures sadece ilk kez çalıstırıldıklarında derlenirler. Daha sonraki çalıstırma islemlerinde derlenmezler. Bu sayede çalısmalarımızda hız kazanmıs oluruz. Stored Procedürlerin bir baska artısı da çok güvenlidir. ÖrnekCreate Proc LastTenPerson as select top 10 ContactID, FirstName, LastName from Person.Contact order by ContactID desc Bu Stored procedurü çalıstıralım; exec LastTenPerson > bize geri dönen sonuç; Bize son 10 kaydı geri döndürdü. Simdi isterseniz bu olusturdugumuz Stored Procedurü, ASP.NET Projesinde kullanalım; lk olarak bir web projesi açalım; Projemizi olusturduktan sonra sayfamıza bir adet grid ekleyelim; Evet simdi kaydımızı görüntüleyecek olan kodları yazalım ilk olarak System.Data ve System.Data.SqlClient namespacelerini sayfamıza ekleyelim. using System.Data; using System.Data.SqlClient; Daha sonra sayfamızda kullanacagımız degiskenleri tanımlayalım; SqlConnection Cnn; SqlCommand Cmd; SqlDataAdapter Da; DataSet Ds; Simdi Kaydımızı listeleyecek olan voidi yazalım(Isterseniz function olarak yada class içerisinde kullanabilirsiniz). private void GetLastTenPerson() { Cnn = new SqlConnection("Data Source=localhost; Initial Catalog=AdventureWorks; trusted_connection=yes");//DB Baglantısı Cmd = new SqlCommand(); Cmd.CommandType = CommandType.StoredProcedure;//Command Tipi Cmd.CommandText = "LastTenPerson";//SP Adı Cmd.Connection = Cnn;//Commandin kullanacagı Connection if (Cnn.State == ConnectionState.Closed) Cnn.Open(); Da = new SqlDataAdapter(Cmd); Ds = new DataSet(); Da.Fill(Ds,"table"); GridView1.DataSource = Ds.Tables[0]; GridView1.DataBind(); } En son olarak bunu Formun Load'da çagıralım; protected void Page_Load(object sender, EventArgs e) { GetLastTenPerson(); } Simdi Projemizi çalıstıralım; Son 10 kaydımızı basarı ile listeledik; Simdi Stored Proceduremizi biraz daha genisletelim ve Bir kriter ekleyelim. Örnegin Firstname'ni biz dısarıdan girelim ve girdigimiz Firstname'e göre kayıtlar listelensin. Bunun için Stored Procedure içerisine dısarıdan bir parametre almalıyız. Biz buna input parametre diyoruz. Stored Proceduremizin düzenlenmis hali; Alter Proc LastTenPerson //SP'mizi Alter ettik @FirstName varchar(20)//Input Parameter as select top 10 ContactID, FirstName, LastName from Person.Contact where FirstName=@FirstName order by ContactID desc exec LastTenPerson 'Crystal' Sonucu görelim; Firstname'i sadece Crystal olanlar geldi; Simdi bunu ASP.NET tarafında da yapalım; Bunun için projemize bir adet buton ve bir adet textbox ekleyelim. Sayfamızdaki kodları Command out yapalım yada silelim çünkü SP degistigi için çalıstıgında hata verecektir. Button1'e tıklayalım; protected void Button1_Click(object sender, EventArgs e) { Cnn = new SqlConnection("Data Source=localhost; Initial Catalog=AdventureWorks; trusted_connection=yes"); Cmd = new SqlCommand(); Cmd.CommandType = CommandType.StoredProcedure; Cmd.CommandText = "LastTenPerson"; Cmd.Parameters.AddWithValue("@Firstname", TextBox1.Text);// Dısarıdan Store Procedure parametre ekliyoruz.. Cmd.Connection = Cnn; if (Cnn.State == ConnectionState.Closed) Cnn.Open(); Da = new SqlDataAdapter(Cmd); Ds = new DataSet(); Da.Fill(Ds, "table"); GridView1.DataSource = Ds.Tables[0]; GridView1.DataBind(); } Simdi projemizi tekrar çalıstıralım ve sonucu görelim. Yukarıda da görüldügü gibi Firstname'i sadece 'Crystal' olan kayıtlar listelenmektedir. Bu makalenin de sonuna geldik, bir sonraki makale de Insert, Update ve Delete islemlerini inceleyecegiz. Baska bir makalede görüsmek üzere basarı ve iyi günler dilerim. Sem GÖKSU MCP | MCAD.NET | MCTS Örnek Kodlar için mail adresimi kullanabilirsiniz semgoksu@semgoksu.com Kaynaklar http://msdn.com
27 Şub 2007 ASP.NET Whois Sorgusu Kategori: ASP.NET Etiketler: ASP.NET 0 Yorum Merhaba arkadaşlar, bu makalemizde ASP.NET ile whois sorgulama işleminin nasıl yapıldığına bakacağız.ASP.NET Whois Sorgusu Bir domain adı almak istedigimizde ik olarak baskası tarafından register edilip edilmedigine yani almak için müsait olup olmadıgına bakarız. Iste bende bu makale de ASP.NET ile whois sorgusunun nasıl yapılacagını anlatacagım. Web kaynaklarını uzaktan sorgulamak için System.Net.WebClient sınıfını kullanırız. Bu sınıf internet kaynaklarına erismek için WebRequest sınıfını kullanır. Burada, bir byte array döndüren ve kaynaktan veriyi indiren WebClient sınıfının Download metodu vardır. Byte olarak gönderilen veri sisteme ANSI olarak encode edilir. Alınan veriyi parse etmek için Regex sınıfını kullanılır. Ihtiyacımız olan veriyi elde etmek için de Match sınıfını kullanacagız... Peki bu bilgileri nereden sorgulayacagız? Bu bilgileri tutan whois serverları kullanarak istedigimiz domain adını sorgulayabiliriz. Ben bu projemde http://www.directnic.com/whois Whois serverını kullanacagım. Simdi örnegimize geçelim; Ilk olarak Bir Web Projesi olusturalım... Projemize domain adlarını sorgulamak için kullanacagımız ve domain adını girmemiz için formumuza bir textbox, domain adı uzantısını seçmemiz için bir dropdown, sonucu görüntülemek için label ve whois sorgusunu yapmak için button ekleyelim. Benim olusturdugum Whois Sayfası asagıdaki gibidir; Simdi bu islem için kodlarımızı yazalım; Evet simdi projemizi çalıstıralım; Simdi domain adını sorgulayalım; Whois sonucu bu domain adının daha önceden register edilmis oldugunu gördük; simdide register edilmemis bir domain adı sorgulayalım; Bu makalenin de sonuna geldik, baska bir makalede görüsmek üzere basarı ve iyi günler dilerim. Sem GÖKSU MCP | MCAD.NET | MCTS Örnek Kodlar için mail adresimi kullanabilirsiniz semgoksu@semgoksu.com Kaynaklar http://www.codeproject.com