string percentage = e.Row.Cells[7].Text;
Ich versuche, einige dynamische Dinge mit meinem GridView zu tun, also habe ich etwas Code mit dem RowDataBound-Ereignis verdrahtet. Ich versuche, den Wert aus einer bestimmten Zelle zu erhalten, die ein TemplateField ist. Aber der obige Code scheint immer eine leere Zeichenfolge zurückzugeben.
Irgendwelche Ideen?
Um zu verdeutlichen, hier ist ein bisschen die beleidigende Zelle:
<asp:TemplateField HeaderText="# Percentage click throughs">
<ItemTemplate>
<%# AddPercentClickThroughs((int)Eval("EmailSummary.pLinksClicked"), (int)Eval("NumberOfSends")) %>
</ItemTemplate>
</asp:TemplateField>
Weiß jemand, ob es eine bessere Möglichkeit gibt, die Zelle in der Zeile auszuwählen? Es nervt, Zelle[1]
einzugeben. Könnte ich nicht Zelle["meinZellname"]
eingeben, so dass, wenn ich die Reihenfolge meiner Zellen ändern möchte, keine Fehler auftreten?
warum nicht die Daten direkt aus der Datenquelle ziehen.
DataBinder.Eval(e.Row.DataItem, "ColumnName")
Wenn Sie ein TemplateField verwenden und literalen Text daran binden, wie Sie es gerade tun, fügt asp.net tatsächlich ein Steuerelement FÜR SIE ein! Es wird in ein DataBoundLiteralControl eingefügt. Sie können dies sehen, wenn Sie im Debugger in der Nähe Ihrer Codezeile, die den leeren Text erhält.
Um also auf die Informationen zuzugreifen, ohne Ihre Vorlage zu ändern, um ein Steuerelement zu verwenden, würden Sie wie folgt vorgehen:
string percentage = ((DataBoundLiteralControl)e.Row.Cells[7].Controls[0]).Text;
So erhalten Sie Ihren Text!
Zuerst müssen Sie Ihren Code in ein "Label"- oder "Literal"-Steuerelement verpacken, damit Sie ihn richtig referenzieren können. Es gibt keine Möglichkeit für das System, den Text zu verfolgen, da kein Steuerelement mit dem Text verbunden ist. Es liegt in der Verantwortung des Steuerelements, seinen Inhalt zum Viewstate hinzuzufügen.
Sie müssen gridView.FindControl("controlName"); verwenden, um das Steuerelement in der Zeile zu finden. Von dort aus können Sie auf seine Eigenschaften zugreifen, einschließlich "Text".
Sie können auch auf die DataItem-Eigenschaft der betreffenden Zeile zugreifen und sie in den entsprechenden Typ umwandeln und die Informationen direkt extrahieren.