Bu yazımızda asp.net standart nesnelerinden olan gridview’in bir özelliğine değineceğim. Öncelikle yapacağımızı kısaca özetlemek istiyorum: Birden fazla kolon ve satır bulunan gridview de seçilen hücredeki değerin alınmasını göstereceğim. Bu işlemi gridin _RowCommand olayında gerçekleştireceğiz. Bu yazıyı yazmadan önce ihtiyacımın olması sonucu araştırdığımda genellikle _PageIndexChanging olayında değerin yakalandığını anlatmışlar fakat benim ihtiyacım olan _RowCommand olayında seçilen hücredeki değeri yakalamak istediğim için kendi çözümümü bu olaya uyarladım. Öncelikle belirtmek isterim ki bu yazacağım yöntemin dışında da cell’in değerini alma yöntemleri vardır. Kodu paylaşmadan önce işin mantığına
Gridview nesnemde bulunan değerlerden istediğim satırları yazdırmak için böyle bir yöntem kullanma gereği görmüştüm. Burada dikkat edilmesi gereken nokta: her döngüde satır sayısını bir artırılmalıdır. Aksi takdirde varsa yeni eklenecek satır olduğunda hataya düşer.
Try-Catch yapısını içinde Response.Redirect ile yönlendime yaptığımızda: sayfa yönlendirme yaptığımızda aldığımız hata mesajıdır. Bu hata yönlendirme koduna kod satırı işler daha catch bloğumuza girer. Bu işlem arka planda çok hızlı bir şekilde gerçekleştiğin için bunu son kullanıcı farketmez. Eğer hata loglaması yapıyorsanız bu durum veritabanında gereksiz satırların kaydına yol açacaktır. Bu durumun önüne geçmek için kullanım biçimi: Response.Redirect(“Sayfanizzz.aspx”, false); biçimindedir. Eğer false değerini vermezseniz otomatik olarak true algılanır.
Gridview de bulunan “Tutar” kolonumda para birimi bulunduğu için ilgili kolonu para birimi formatına ayarlama ihtiyacı oluştu. <%# String.Format("{0:C}", Eval("KolonAdiniz"))%> Faydalı olması dileğiyle
Konuda bahsettiğim hatanın çözümünü araştırmam sonucu işe yarar bir çözüm önerisi bulamadığım için böyle bir blog yazısı yazma gereği gördüm. Sorunun çözümünde kalıplaşmış cevaplardan olan web.config sayfasına: enableEventValidation=”false” enableViewStateMac=”false” … kodunu eklediğim halde sorunum çözülmemişti. Bunun üzerine http://www.a2zmenu.com/utility/machine-key-generator.aspx adlı siteden machine key üretim bunu web.config sayfama eklemem sonucu resim olarak eklediğim sorunu gidermiş oldum. Eğer web host’unuz firma sunucusunda değilde kendi sunucunuzda ise şu yöntemi de deneyebilirsiniz: IIS üzerinden Web Sitenizi seçin ve Machine Key menüsüne giderek => Generate keys => Apply
Konuda bahsettiğim soruna çözüm olarak alternatif çözüm yönleri bulmam sonucu paylaşmak istedim. JavaScript’lerde sıkıntı yaşadığım için bazı yöntemler benim sistemimde sorun çıkarmıştı. Bu gibi nedenlerden dolayı çözüm hususunda uzun süre efor sarfetmiştim. Umarım benim gibi arkadaşlara yardımcı olur. Yöntem 1 (Önerdiğim) protected void btnYazdir_Click(object sender, EventArgs e) { string Parametre1 = lblMusteriID.Text; ScriptManager.RegisterStartupScript(Page, typeof(Page), "OpenWindow", "window.open('/SayfaAdiniz.aspx?Musteri=" + parametre_1 + " ');", true); } Yöntem 2 Response.Write("<script>"); Response.Write("window.open('/SayfaAdiniz.aspx?Musteri=" + gridListe.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString() + " ','_blank')"); Response.Write("</script>"); Yöntem 2 de ID yi gridden aldığım için ilgili alanı göstermek amacıyla silmedim. Faydalı olması dileğiyle
Bu yazımda konuda da bahsettiğim gibi asp.net aracı olan gridview in rowdatabound özelliğinden bahsedeceğim. Öncelike neden bu event a ihtiyaç duyduğu açıklayacak olursam: grid de ilgili satırdaki veriye göre renklendirme işlemi yapmak istediğim için bu olayı kullandım. Faydalı olması ümidiyle. protected void gridListe_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { switch ((e.Row.FindControl("lblHareketTuru") as Label).Text) { case "Stok Girişi": e.Row.BackColor = Color.Green; break; case "Stok Çıkışı": e.Row.BackColor = Color.Yellow; break; } } }
Visual Studio 2013 asp.net de uygulama geliştirirken karşılaştığım bir hatayı ve çözümüne değineceğim: Çözümü: web.config sayfanıza <system.web> <pages enableEventValidation="false" validateRequest="false" enableViewStateMac="false" > </pages> </system.web> kod bloklarını eklemektir.
Ajax Calender Extender Türkçe Formatı: <asp:ToolkitScriptManager ID="ToolkitScriptManager1" EnableScriptGlobalization="true" runat="server"></asp:ToolkitScriptManager>
.aspx Kısmı <asp:Button ID="btnYazdir" runat="server" OnClick="btnYazdir_Click" OnClientClick="form1.target='_blank';" Text="Yazdır" /> .aspx.cs Kısmı protected void btnYazdir_Click(object sender, EventArgs e) Response.Redirect("GidecegiSayfa");
- 1
- 2