23 Şub 2007 ASP.NET Multi Upload Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0 8 Yorum Merhaba arkadaşlar, bu makalemizde web sitelerinde çok sık kullandığımız file upload kontrolünü genişleterek Multi Upload kontrolü oluşturacağız.ASP.NET Multi UploadFile upload kontrolü bazen tek basına yetmez. yani tek dosya upload'u bizim için yeterli olmaz. Birden fazla dosya upload etmek istedigimizde bunu tek tek yapmak bizim için oldukça zor olur. Hele upload edilecek dosya sayısı belli degilse yada degiskense... Burada biz kendi çözümümüzü gelistirmeliyiz. Ben de bu makale de size kendi gelistirmis oldugum çözümü anlatacagım. Bunu nasıl yapacagız ? Run time'da sayfamıza file upload kontroller ekleyerek bu islemi gerçeklestirebiliriz. protectedvoid Page_Load(object sender, EventArgs e) { FileUpload myFileUpload = new FileUpload(); myFileUpload.ID = "Upload_Dosyasi"; this.form1.Controls.Add(myFileUpload); } Bu kod sayfa açıldıgında formumuza formupload kontrolü ekleyecek.. Evet tek bir kontrolü eklemek istedigimizde bunu yapmak yukarıdaki kadar kolay. Simdi bu islemi çoklu upload için yazalım. Ilk olarak sayfamıza bir adet Panel(upload kontrolleri bu panele ekleyecegiz), DropDownList(Kaç adet File Upload kontrolü sayfamıza eklenecek bunu belirleyecek ben item olarak 3,5,7,10 ekledim) Button(File Upload kontrolünde seçilen dosyaları upload edecek) Benim olusturdugum sayfa asagıdaki gibidir; Sayfamız ilk açıldıgında default olarak 10 adet file upload kontrolü eklensin. protected void Page_Load(object sender, EventArgs e) { for (int i = 1; i <= 10; i++)//10 kere dön { FileUpload myFileUpload = new FileUpload();//Yeni File Upload Kontrolünin instance'ni al myFileUpload.ID = "Upload_" + i;//Erismek için ID'ni belirle this.Panel1.Controls.Add(myFileUpload);//Kontrolü panel içine ekle }}Evet simdi projemizi çalıstıralım; Sayfamıza 10 dan daha az yada daha fazla kontrol eklemek isteyebiliriz. Bunun için seçecegimiz Dropdownda deçecegimiz göre degisecek. Ilk olarak Dropdownun AutoPostback özelligini True yapalım. Simdi gerekli kodları yazalım. protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Panel1.Controls.Clear(); for (int i = 1; i <= Convert.ToInt32(DropDownList1.SelectedValue); i++) { FileUpload myFileUpload = new FileUpload(); myFileUpload.ID = "Upload_" + i; this.Panel1.Controls.Add(myFileUpload); } } Projemizi tekrar çalıstıralım ve ve dropdowndaki degeri degistirelim; Evet 3 adet kontrol eklendi... Simdi sayfamıza ekledigimiz kontroller için upload islemini yapalım. Button'umuza tıklayalım; FileUpload myFileUpload; // Unutmayalım !!protected void Button1_Click(object sender, EventArgs e) { for (int i = 1; i <= Convert.ToInt32(DropDownList1.SelectedValue); i++) { myFileUpload = ((FileUpload)Panel1.FindControl("upload_" + i.ToString())); if (myFileUpload.HasFile) { myFileUpload.SaveAs(Server.MapPath("images/"+myFileUpload.FileName)); Response.Write(i.ToString()+". Dosya "+ " Upload Edilen Dosya Adı:"+myFileUpload.FileName + "<br/>"); } }} Evet simdi isterseniz bunu test edelim; Evet simdi dosyalarımızı upload edelim... Image klasörü içine gidip upload kontrollere bakalım gerçekten eklemismi : ) EVET 1.gif,2.gif ve 3.gif image klasörümüze eklendi... Eger 3 tane upload yetmediyse dropdowdan istedigimiz sayıyı seçelim ve istediginiz kadar upload yapalım : ) Bu makalenin de sonuna geldik, baska bir makalede görüsmek üzere basarı ve iyi günler dilerim. Örnek Kodları buradan indirebilirsinizSem GÖKSUMCP | MCAD.NET | MCTSsemgoksu@semgoksu.com Kaynaklarhttp://msdn.com
21 Şub 2007 Alfabetik Sayfalama Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0ASP.NET 4.0 1 Yorum Merhaba arkdaşlar, bu makalemizde Gridview kontrolü üzerinde Alfabetik sayfalamanın nasıl yapıldığına bakacağız. Alfabetik Sayfalama Bu makalemizde gridview de klasiklesmis olan numeric bazlı yada navigation bazlı sayfalama düzeninden vazgeçip gridview üzerinde Alfabetik sayfalama yapacagız. Bu bize ne saglayacak? Örnegin bir fihrist, sözlük vs.. yaptıgımız da A harfindekileri kayıtları bulmak isteriz. Ya da sadece B harfindeki kayıtları... Klasik sayfalama (1.2.3 yada prev., next) bize burada çözüm olmayacaktır. Iste bunu çözmek için Alfabetik sayfalama en iyi çözümdür. Simdi isterseniz bu çözümü örnekleyelim; SQL Server 2005 içindeki AdventureWorks Database'indeki Person.Contact tablosundaki kayıtlarımı gridview ile listeleyelim. Ilk olarak bir web projesi açalım; Ben alıskanlık olarak ajax projesi açtım. Daha sonra formumuzda ne yapacagımıza geçelim. Sayfamızda Alfabetik olarak sıralanan harfler olacak ve biz bu harflere tıkladıgımız zaman; gridview de bu harfe baglı olan(örnegin A ile baslayanlar) kayıtlar listelenecek. Ilk olarak formumuz üzerine bir adet panel ve gridview ekleyelim. Paneli ekledik çünkü bu panelin üzerine LinkButton'lar olusturacagız. Evet simdi isterseniz projemize hareket katalım ve projemize AJAX özelliklerini de ekleyelim. Bunun için formumuza Script Menager, UpdatePanel ve UpdateProgress de ekleyelim. Evet simdi butonlara tıkladıgımızda gridview refresh olmadan kayıtları listeleyecek. Isterseniz ilk olarak Panel üzerinde listelenecek olan Alfabetik Paging'i olusturalım. protected void CreateLink() { string[] letters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "All"}; for (int i = 0; i < letters.Length; i++) { LinkButton myLetter = new LinkButton();Yeni Bir LinkButton olusturduk myLetter.ID = myLetter + i.ToString(); myLetter.CommandName = "LetterPaging";// myLetter.CommandArgument = letters[i].ToString(); myLetter.Text = letters[i].ToString() + " "; myLetter.Command += new CommandEventHandler(myLetter_Command); // Burada Command Eventini olusturuyoruz. this.PagingPanel.Controls.Add(myLetter);//Olusturulan Butonu Panel'e ekliyoruz } } Simdi isterseniz pagingimizi test edelim; Tabi önce bu Void'i form_load da çagırmalıyız. Pagingimizi olusturduk... Simdi Bu linklere tıklanınca olusacak olan kodları yazalım. Yukarıda myLetter.Command += new CommandEventHandler(myLetter_Command); Olusturdugumuz Command eventi içerisini yazalım; private void myLetter_Command(object sender, CommandEventArgs e) { if (e.CommandName.ToString() == "LetterPaging") { if (e.CommandArgument.ToString() != "All") { GetContactsByLetter(e.CommandArgument.ToString()); } else { GetAllContacts(); } } } Burada Command Name'e göre ve gelen commandArgument degerine göre 2 islem yapılıyor; Eger CommandArgument degeri All ise GetAllContacts Voidini çagırıyor degilse de GetContactsByLetter("A") voidini çagrıyor. Simdi bunları olusturalım. SqlConnection Cnn; SqlDataAdapter Da; DataSet Ds; private void GetAllContacts()//tüm kayıtları listele { Cnn = new SqlConnection("Data Source=localhost; initial catalog=AdventureWorks; trusted_connection=yes"); if (Cnn.State == ConnectionState.Closed) Cnn.Open(); Da = new SqlDataAdapter("SELECT top 20 FirstName + ´ ´ + LastName as ContactName, EmailAddress FROM Person.Contact", Cnn); Ds = new DataSet(); Da.Fill(Ds, "TBL"); GridView1.DataSource = Ds.Tables[0]; GridView1.DataBind(); } private void GetContactsByLetter(string Letter)//Gelen Harfe göre listele { Cnn=new SqlConnection("Data Source=localhost; initial catalog=AdventureWorks; trusted_connection=yes"); if (Cnn.State == ConnectionState.Closed) Cnn.Open(); Da = new SqlDataAdapter("SELECT top 20 FirstName + ´ ´ + LastName as ContactName, EmailAddress FROM Person.Contact where Firstname like ´" + Letter + "%´", Cnn); Ds = new DataSet(); Da.Fill(Ds, "TBL"); GridView1.DataSource = Ds.Tables[0]; GridView1.DataBind(); } Pagingimizden sonra Listelenecek olan kayıtlarımız da hazır; ama kullanıcı sayfaya geldiginde sayfayı bos görmesin bunun için GetAllContacts voidini form_load da çagıralım. Tabi linkleri olusturmak için CreateLink voidinide... protected void Page_Load(object sender, EventArgs e) { GetAllContacts(); CreateLink(); } Projemizi çalıstıralım; Tüm kayıtlar listelendi; Simdi a harfine tıklayalım; Postback olmuyor ve Ajax UpdateProgress ile kullanıcıyı bilgilendiriyoruz... Evet iste A harfi ie baslayan kullanıcıları listeledik : ) 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://msdn.com http://www.codeproject.com
17 Şub 2007 DataBound Kontroller ile SQL Paging Kullanımı Kategori: ASP.NET Etiketler: ASP.NET AjaxASP.NET 2.0 1 Yorum Merhaba arkadaşlar bu makalemizde SQL server ile Databound (Gridview, Datalist, Repeater) kontroller ile pagin’in nasıl yapıldığına bakacağız.DataBound Kontroller ile SQL Paging KullanımıSQL Server 2005 ile gelen ROW_NUMBER() fonksiyonu ile SQL Server üzerinde sayfalama yapmak artık çok kolay. ROW_NUMBER() fonksiyonu bize kayıtlarımızın yanında bir satır numarası olusturur ve sayfalamamız ve indexlememiz için bize yardımcı olur. Row_Number() Kullanımı: select top 10 row_number() over (order by name asc) as SatyrNO, ProductID, Name,ProductNumber from Production.Product Gördügümüz gibi bize geriye satır no isimli bir field döndürüyor ve 1 den artarak bize satır numarası olusturuyor. Bu özellikle windows uygulamaları için güzel bir çözüm oldu. Web uygulamarında pagingleme oldukça basitti ama onunda dezavantajları vardı. Özellikle çok fazla kayıt içeren data datagride yüklendiginde tüm veri hem gride yüklenirken oldukça zorlanıyordu hemde sayfalar arasında gezinirken veri tekrar tekrar yükleniyordu. SQL server ile gelen ROW_NUMBER() fonksiyonu ile bize identity gibi artan bir satır numarası döner ve biz bu satır numarası üzerinde istedigimiz degerleri gönderir istedigimiz kadar kaydı görüntüleyebiliriz. Yani grid üzerinde kaç kayıt görüntülemek istersek o kadar kayıt gride yüklenecek. Buda inanılmaz bir performans kazancı olacak.Örnek:select * from (select row_number() over (order by name asc) as SatirNo, ProductID, Name,ProductNumber from Production.Product) Products where (SatirNo between 20 and 30)Gördügümüz gibi bize 20 ve 30 satır numarası arasındaki kayıtlar geri döndü. Artık örnegimize geçebiliriz.Yeni bir web site açalım ve bir grid ekleyelim. Gridimizi ekledikten ve pagin içinde bir label ekleyelim. Grid üzerinde 10 kayıt görüntüleyecegiz ve diger kayıtlara geçmek için olusturacagımız paging ile diger sayfalardaki kayıtlara geçecegiz.Not: Aynı islemi Datalist ve Repeater ile de yapabiliriz. Ben anlasılır olması için Gridview üzerinde yapacagım.Kodumuzu yazmaya baslayalım; ilk olarak connection stringi ayarlayalım. SqlConnection Cnn; SqlCommand Cmd; DataSet Ds; SqlDataAdapter Da; private string CnnStr() // Connection Stringi ayarladık { return "Data Source=*******;initial Catalog=*******;Uid=*******;pwd=*******"; }Connection Stringimizi olusturduk, simdi de Datayı çekecek olacak void'i yazalım. private void DatayiGetir(int Start, int End) // Görüntülenecek datayı çektik.. { Cnn = new SqlConnection(CnnStr()); string sqlstr = "select * from (select row_number() over (order by InsertionDate asc) as SatirNo, InsertionDate, UpdateDate from Messages) Messages where (SatirNo between " + Start + " and " + End + ")"; Da = new SqlDataAdapter(sqlstr, Cnn); Ds = new DataSet(); Da.Fill(Ds, "tbl"); GridView1.DataSource = Ds.Tables[0]; GridView1.DataBind(); }Voidimizi yazdıktan sonra simdi de sayfamızdaki paginglemeyi ayarlayalım. Bunun için öncelikle ihtiyacımız olan Toplam kayıt sayısıdır. Buradan sayfalanacak olan sayfa sayısını bulacagız. private int KayitSayisi() // Sayfalama için Toplam kayıt sayısını aldık. { Cnn = new SqlConnection(CnnStr()); string sqlstr = "select Count(*) from Messages"; if (Cnn.State == ConnectionState.Closed) Cnn.Open(); Cmd = new SqlCommand(sqlstr,Cnn); int recordCount= (int)Cmd.ExecuteScalar(); return recordCount; }Toplam kayıt sayısını aldıktan sonra simdi Sayfa sayısını bulalım ve pagini ekrana basalım.privatevoid PagingiOlustur() { int ToplamSayfaSayisi; StringBuilder sb = new StringBuilder(); if (KayitSayisi() % 10 == 0) { ToplamSayfaSayisi = KayitSayisi() / 10; } else { ToplamSayfaSayisi = KayitSayisi() / 10 + 1; } for (int i = 0; i < ToplamSayfaSayisi; i++) { sb.Append("<a href=SQLPagingAndCustomDataGrid.aspx?Sayfa=" + +(i) + ">" + (i + 1) + "</a>\n"); } Label1.Text = sb.ToString(); }Pagingimizi olusturduktan sonra artık paging isleminin çalısması için Formumuzun loadında Datayı getirecek vodidi ve paging olusturacak voidi çagıralım. private int SayfaNo, Baslangic, Bitis; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Request.QueryString["Sayfa"] != null) { SayfaNo = Convert.ToInt32(Request.QueryString["Sayfa"]); } else { SayfaNo = 0; } Baslangic=(SayfaNo *10) + 1; Bitis = Baslangic + 10 -1; PagingiOlustur(); DatayiGetir(Baslangic,Bitis); } }Simdi Projemizi çalıstıralım;Satır numaralarına dikkat ederseniz 1 den 10 a kadar devam ediyor. 2. sayfaya geçelim.Yine satır numaralarına dikkat edersek 10 dan 20 ye kadar yani 2. sayfadaki kayıtları gösteriyor. Gerçekten çok hızlı : )Sizde uyguladıgınızda datanın gridview ile paginglenmesine göre daha performanslı oldugunu göreceksiniz. 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 askisem@hotmail.com Kaynaklarhttp://msdn.com
12 Ara 2006 Gridview Kontrolü ile Çoklu Silme İşlemi Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0 1 Yorum Merhaba arkadaşlar bu makalemizde gridview kontrolü içerisinde seçili olan kayıtları silme işleminin nasıl yapılacağına bakacağız...Kalabalık bir kayıt listesi içerisinde gereksiz olan bir çok kayıt silinmek istendiginde bu kayıtları tek tek silmek çogu zaman kullanıcı için sıkıcı bir istir. Bunun için kullanıcı gereksiz olan kayıtları kendisi seçip, tek bir sefer de silmeyi tercih eder. Bu kullanıcıya büyük kolaylık saglar. Normalde gridview nesnesinde kayıt listesinin yanında sil isimli bir buton koyar ve o satırdaki kaydı sildirirdik. Biz gridview nesnemizi biraz daha genisleterek kullanıcının kayıtların tümünü seçerek veya tek tek silecegi bir kayıt listesi sunacagız. Ilk olarak visual studio açalım ve asp.net projesi olusturalım. Ben dil olarak C# Seçtim. Daha sonra projemizde kullanacagımız nesnelerden bahsedelim. Ben projemde Northwind database'i içerisindeki Products tablosunu kullanacagım. Field olarak da Grid içerisin de ProductID, ProductName ve UnitPrice fieldlarını kullanacagım. Ek olarak grid içerisinde bir template field olusturup Header Template içerisine CheckAll isimli bir checkbox ve item template içerisinede deleteRec isimli bir checkbox kontrolü ekledim. Birde seçecegim kayıtları sildirmek için bir adet link buton ekledim. Form tasarımım asagıdaki gibi olustu. Formumuzun tasarımını tamamladıktan sonra simdi Tümünü seç ve tek tek seçim yapmak için gerekli olan javasctipt kodlarını yazalım. function check_uncheck(Val) { var ValChecked = Val.checked; var ValId = Val.id; var frm = document.forms[0]; for (i = 0; i < frm.length; i++) { if (this != null ) { if (ValId.indexOf('CheckAll' ) != - 1) { if (ValChecked) frm.elements[i].checked = true ; else frm.elements[i].checked = false ; } else if (ValId.indexOf('deleteRec' ) != - 1) { if (frm.elements[i].checked == false ) frm.elements[1].checked = false ; } } // if } // for } // function Javascript içerisine fonksiyonlarımızı yazdıktan sonra bunu gridview nesnesi üzerindeki checkboxlarda çagıralım. <asp : GridView ID ="dbGrid" runat ="server" AutoGenerateColumns ="False" CellPadding ="4" Font-Names ="Verdana" Font-Size ="X-Small" ForeColor ="#333333" GridLines ="None" Width ="448px"> <FooterStyle BackColor ="#5D7B9D" Font-Bold ="True" ForeColor ="White" /> <Columns> <asp:TemplateField> <HeaderTemplate> <asp:CheckBox ID ="CheckAll" runat ="server" onClick ="return check_uncheck(this);" /> --->>> tümünü Seç <HeaderTemplate> <İtemTemplate> <asp : Label ID ="ProductID" Visible ="false" Text =' ' runat ="server" /> <asp:CheckBox ID ="deleteRec" runat ="server" onClick ="return check_uncheck (this );" /> --->>> Tek Tek Seç <ItemTemplate> <FooterTemplate> <asp:TemplateField > <asp:BoundField DataField ="ProductID" HeaderText ="ProductID" /> <asp:BoundField DataField ="ProductName" HeaderText ="ProductName" /> <asp:BoundField DataField ="UnitPrice" HeaderText ="UnitPrice" /> </Columns > < RowStyle BackColor ="#F7F6F3" ForeColor ="#333333" /> < EditRowStyle BackColor ="#999999" /> < SelectedRowStyle BackColor ="#E2DED6" Font-Bold ="True" ForeColor ="#333333" /> < PagerStyle BackColor ="#284775" ForeColor ="White" HorizontalAlign ="Center" /> < HeaderStyle BackColor ="#5D7B9D" Font-Bold ="True" ForeColor ="White" HorizontalAlign ="Left" /> < AlternatingRowStyle BackColor ="White" ForeColor ="#284775" /> </asp : GridView > Bu yazdıklarımızı test edelim. Projemizi çalıstıralım ve tek tek kayıtları seçelim. Ardından tümünü seç butonuna tıklayıp düzgün çalısıp çalısmadıgını kontrol edelim. Kodumuz düzgün çalıstıgına göre artık sectigimiz kayıtları silelim. protected void LinkButton2_Click(object sender, EventArgs e) { string gvIDs = "" ; bool chkBox = false ; foreach (GridViewRow gv in dbGrid.Rows) { CheckBox deleteChkBxItem = (CheckBox )gv.FindControl("deleteRec" ); if (deleteChkBxItem.Checked) { chkBox = true ; gvIDs += (( Label )gv.FindControl("ProductID" )).Text.ToString() + "," ; } } SqlConnection cn = new SqlConnection ("Data Source=.; Initial Catalog=Northwind; uid=sa; pwd=" ); if (chkBox) { try { string deleteSQL = "DELETE from Products WHERE ProductID IN (" + gvIDs.Substring(0, gvIDs.LastIndexOf( "," )) + ")" ; SqlCommand cmd = new SqlCommand (deleteSQL, cn); cn.Open(); cmd.ExecuteNonQuery(); dbGrid.DataSource = DataTableGetirLan(); dbGrid.DataBind(); Response.Write( "Seçmis oldugunuz kayıtlar Silindi !" ); } catch (SqlException err) { Response.Write(err.Message.ToString()); } finally { cn.Close(); } } } Son olarak silme islemini de test edelim. Gördügümüz gibi tek sefer de seçmis oldugumuz kayıtlar silindi. Not: Eger sizde nortwind içerisindeki Products tablosunu kullanacaksanız diger tablolar ile arasında bulunan iliskileri kaldırın. Yoksa kayıtları silerken hata alacaksınız.Bu makalemizinde sonuna geldik. Umarım faydalı bir makale olmustur. Iyi günler ve basarılar dilerim.Sem GÖKSU MCP | MCAD.NET | MCTSÖrnek kodlar için mail adresimi kullanabilirsiniz.askisem@hotmail.com
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...