ASP.NET projesi yapıyorsak ve veritabanından çektiğimiz verileri  istemciye gösteriyorsak, bunun için en çok kullandığımız yöntem, bir gridview içerinde göstermedir.

Verilerimizi çektik, ekranda gösterdik, ama bu bize yetmedi. Kullanıcının bunlardan sadece ve sadece birini seçmesini istiyoruz. Ama kullanıcıya da güvenmeliyiz, ekstra kontroller koymakla uğraşıp, projenin bitişini uzatmamalıyız. Bu yüzden Radio Button kullanmak en mantıklısı.

Ancak, radio button’da şöyle bir sorunumuz var. Gridview içerisindeyken, oluşturulan tüm radio buttonlar (GroupName propertyleri aynı olsa dahi) tarayıcıda aynı ismi almakta. Bu yüzden bizim oluşturduğumuz grup işe yaramamkta. Bu yüzden, radio button ile seçim yapmamıza rağmen 5 maddelik bir gridview’in satırlarının hepsini seçebiliyoruz, ki bu bizim istediğimiz bir durum değil.

Bu durumu gidermenin 2 yöntemi var:

1.si .aspx sayfasında gridview’in her satırı için elle

<INPUT type=radio name="radio">

şeklinde kodlar kullanarak gridview oluşturmak. Ancak bu tipte yöntemle oluşturulan radio button’da PostBack işlemi sırasında hangi satırın seçili olduğunu bulabilmek için kullanmamız gereken Checked propertisi, tanımlanmış durumda değil. Checked propertisini tanımlamak gerekli. Ama bu tanımlama işlemi kod yazanı gereksiz yere zorlucak bi işlem olarak görüyorum. Onun yerine 2. yöntemi kullanarak işlemlerini hızlandırabilir.

2. yöntemde input eklemek yerine, gridview in en başta yer alan sütununa Literal nesnesi koyuyoruz. OnRowCreated işlemi sırasında bu Literal nesnesini alıp

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

şeklindeki gibi Literal’in text propertisine inputumuzu veriyoruz.

Input bu şekilde verildikten sonra, sıra hangi satırın seçili olduğunu tespit etmeye geliyor. Bu işlem de:

public int GridViewSelectedIndex
{
   get 
   {
       if(string.IsNullOrEmpty(Request.Form["radio"]))
           return -1;
       else
           return Convert.ToInt32(Request.Form["radio"]);
   }
}

kod parçaçcığıyla halledebiliyoruz. Bundan sonra GridViewSelectedIndex bizim gridview içerisinde yer alan satırlardan hangisini seçtiğimizi gösterir hale geliyor. Bundan sonra bunu ister DataKeylerle, ister CommandNamelerle kullanabiliriz.

Tags: , , | Categories: ASP.NET | C#