GridView RowDataBound Ereignishandler nicht finden GridView-Zellen-Inhalt
Habe ich Folgendes GridView
, die als DataSource
eine List<T>
:
<asp:GridView ID="gvDownloads" UseAccessibleHeader="False"
AutoGenerateColumns="False" runat="server" PageSize="10" AllowPaging="true"
CellPadding="4" CellSpacing="1" GridLines="None" DataKeyNames="productid">
<EmptyDataTemplate>
No licenses found
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="Id" >
<ItemTemplate>
<%# Eval("ProductId")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Product Name">
<ItemTemplate>
<%# Eval("ProductName")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Stock Code">
<ItemTemplate>
<%# Eval("StockCode")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Leistet, ordnungsgemäß und mit den korrekten Werten.
Nun, ich möchte ändern auf der fliege das Feld StockCode und um das zu tun so das ich in meinem code hinter:
Sub gvDownloads_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles gvDownlads.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.Cells(2).Text = StockCodeConverter.Convert(e.Row.Cells(2).Text)
End If
End Sub
Aber die Daten-Zellen der entsprechenden StockCode leer sind. Jetzt habe ich versucht zu Debuggen und aus irgendeinem Grund ist der code findet nur der Wert des header-Zeile. Die Werte der anderen Zeilen sind string.Empty
oder &nsbp. Könnte es davon abhängen, die Liste als DataSource?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden ASP.NET Kontrollen statt, zum Beispiel
- Etiketten
:auf aspx:
Können Sie auch weglassen, die
Eval
auf aspx und setzen Sie dieText
Immobilie vollständig im codebehind:Bearbeiten: Wenn Sie möchten, bleiben Sie mit Ihrem text und auch mit der
TemplateField
Sie wirken könnte das erste Steuerelement in der Zelle ist eine automatisch generierteDataBoundLiteralControl
, wenn es nur text, und verwenden Sie esText
Eigenschaft.Aber das macht den code weniger lesbar meiner Meinung nach.
TemplateField
Steuerelemente enthält, die Sie zugreifen können über Ihre ID ' s. Wenn Sie nicht es verwenden möchten, können Sie einenBoundField
, dann dieText
Eigenschaft würde die Zelle nicht leer sein.Denke ich in GridView RowDataBound-Ereignis wie die Bindung ist noch in Bearbeitung, Sie sind nicht immer alle Wert...ich schlage vor, Sie verwenden "DataRowView"