string percentage = e.Row.Cells[7].Text;
GridView'imle bazı dinamik şeyler yapmaya çalışıyorum, bu yüzden RowDataBound olayına bazı kodlar bağladım. TemplateField olan belirli bir hücreden değer almaya çalışıyorum. Ancak yukarıdaki kod her zaman boş bir dize döndürüyor gibi görünüyor.
Bir fikrin var mı?
Açıklığa kavuşturmak için, burada rahatsız edici hücreden bir parça var:
<asp:TemplateField HeaderText="# Percentage click throughs">
<ItemTemplate>
<%# AddPercentClickThroughs((int)Eval("EmailSummary.pLinksClicked"), (int)Eval("NumberOfSends")) %>
</ItemTemplate>
</asp:TemplateField>
İlgili bir notta, satırdaki hücreyi seçmenin daha iyi bir yolu olup olmadığını bilen var mı? Hücre[1]yazmak berbat. Hücre["hücreadım"]
yapamaz mıyım, böylece hücrelerimin sırasını değiştirmeye karar verirsem hatalar görünmez mi?
Bir TemplateField kullandığınızda ve ona sizin yaptığınız gibi gerçek metin bağladığınızda, asp.net aslında SİZİN İÇİN bir kontrol ekleyecektir! Bir DataBoundLiteralControl içine yerleştirilir. Hata ayıklayıcıda boş metni alan kod satırınızın yanına bakarsanız bunu görebilirsiniz.
Dolayısıyla, şablonunuzu bir kontrol kullanacak şekilde değiştirmeden bilgiye erişmek için şu şekilde döküm yaparsınız:
string percentage = ((DataBoundLiteralControl)e.Row.Cells[7].Controls[0]).Text;
Bu sana mesajını getirecek!
Öncelikle, kodunuzu bir Label
veya Literal
kontrolüne sarmanız gerekir, böylece ona düzgün bir şekilde başvurabilirsiniz. Olan şey, sistemin bunu takip etmesinin bir yolu olmamasıdır, çünkü metinle ilişkili bir kontrol yoktur. İçeriğini viewstate'e eklemek kontrolün sorumluluğundadır.
Satırdaki kontrolü almak için gridView.FindControl("controlName"); kullanmanız gerekir. Buradan Text
dahil olmak üzere özelliklerine ulaşabilirsiniz.
Ayrıca, söz konusu Satırın DataItem özelliğine ulaşabilir ve bunu uygun türe dökebilir ve bilgileri doğrudan çıkarabilirsiniz.