Asp.net GridView içinde radio button kullanmak

asp netMerhaba arkadaşlar bu kez internette çok sık rastlamayacağınız bir makalede buluştuk. Konumuz bir gridview içinde radio buton kullanımından bahsedeceğim. İşin aslı normal html formatta radio buton kullanabilirsiniz ama bu biraz farklı çünki html ile kullanıldığında istediğiniz sonuçları alamayabilirsiniz. Zaten notmal radio kullandığınız da değerini sadece javascript ile alabilirsiniz. Şimid biz kendi konumuza yoğunlaşalım. Bir problem örneğiyle başlayalım. Farzı misal veritabanınızda bulunan kayıtları bir gridview e aktardınız ve o kaytlardan sadece birini seçip kullanıcıya işlem yaptırmak istiyorsunuz.

Ben bir sigorta örneği ile konuyu anlatacağım. Diyelim veritabnınızda sigorta şirketleri kayıtlı ve siz kullanıcıya radio buton ile birini seçip işleme devap ettirmek isityorsunuz.

radio_buton_kullanimi_ornek

Yukarıdaki resimde sadece bir kayıt var ama siz fazla olarak düşünün :). Şimdi bunu nasıl yapacağız ondan bahsedelim. İlk olarak sayfanıza bir gridview ekleyiniz ve onu bir tada sourceye bağlayınız.

Tamam iyide radio ları nasıl ekleyeceğiz. Onu da farklı bir yontemle yapacağız. Şöyle;

Radioların çıkmasını istediğiniz yere bir literal ekleyiniz.

<asp:Literal ID=”Literal1″ runat=”server”></asp:Literal>

Tamam literali uygun yere eklediniz bunun radio ile alakası ne diyeceksiniz. Bu literalin içine source tarafından kod yarak radio yu ekleyeceğiz. Tamam güzel anladıkta neden böyle bir şey yapıyoruz?. Şunadan bunun içindeki tüm radiolara kod tarafından ulaşmak için.

şimdi sonraki adım olakra source yani cs kodlarını yazdığımız tarafa geçerek literalin içini dolduracağız ama dikkat edilecek bir durum var bunu giridview içindeki satırlar her oluşturulduğunda yapacağız yani ‘OnRowCreated=”trafik_grid_crated”‘ özeliiğini ekleyeceğiz giridviewe.

ve kod tarafında da

 

protected void trafik_grid_crated(object sender, GridViewRowEventArgs e)

{

 

if (e.Row.RowType == DataControlRowType.DataRow)

{

Literal item = (Literal)e.Row.FindControl(“Literal1”);

item.Text = string.Format(“<input type=\”radio\”name=\”radio1\”id=\”radio{0}\” value=\”{0}\” runat=\”server\”/>”, e.Row.RowIndex);

}

}

burada trafik_girid benim girid nesnemin adı.

buradaki kodların kısaca anlamı giride her kayıt yüklendiğinde literal içerisini yazdığım html kodlarda ekleniyor. Böylece her satırda radiolarım çıkmış oluyor. Burada siz yabancı gelecek bir kodda (Literal)e.Row.FindControl(“Literal1”); olabilir bunu kullanmamızın amacıda giridview gibi nesnelerin içindeki nesnelere direk erişim saylağamiyoruz. bunun için önce o giridviewe erişim sağlayıp onun içindeki literal nesnesine erişim sağlıyoruz. bunun hakkında detaylı bu makaleyi okuyabiirsiniz.

Şimdi bu işlemden sonra bir fonksiyoun oluşturacağız bunuda butana basıldığında kullanacağız. Bu fonksiyon bize seçilen radio nun ne olduğunu anlamamıza yarıyacak.

private int trafik_grid_SelectedIndexChanged

{

get

{

if (string.IsNullOrEmpty(Request.Form[“radio1”]))

return -1;

else

return Convert.ToInt32(Request.Form[“radio1”]);

}

}

 

yukarıdaki kodlar formda yer alan radio id li form elemanını kontrol ederek işaretlimi değilmi bunu anlamamızı sağlayacak.

ve son olarak sayfamıza eklemiş olduğumuz bir butona click olayı vererek örneğimizi bitireceğiz

 

protected void trfk_sgrt_btn_click(object sender, EventArgs e)

{

 

if (trafik_grid_SelectedIndexChanged != -1)

{

label1.Text = ((Label)trafik_grid.Rows[trafik_grid_SelectedIndexChanged].FindControl(“Label5”)).Text;

}

}

 

burada ilgili butona tıkladığımızda label1 isimli labela trafik_grid.Rows isimli gridviewin fonksiyondan dönen satırımdaki label5 isimli labelin değeri yazılacaktır. ben label5 e sigorta ismini eşitlemiştim doğal olarak label1 seçilen sigorta ismini eşitleyecektir.

Biraz karışık bir anlatım oldu ama inş işinize yarar.

Başka bir makalede görüşmek üzere Sağlıcakla kalın…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.