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.
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;
}
}
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...
Köksal İYİGÜN
koksal_iyigun@aspnedir.net
TemplateField ile daha iyisini yapabilirsin. Hatta RadioButonların içeriğini başka bir veri tabanından da çekebilirsin. Tüm kontrolleri sağlayabilirsin. Baktın HTML hoşuna gitmedi "asp:RadioButtonList" de kullanabilirsin. Hem bu kadar kasmana gerekte yok. Milletin kafası karışmasın.
YanıtlaSil