Mam następujący GridView, który ma DataSource a 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>

Który renderuje poprawnie i z odpowiednimi wartościami.

Teraz chciałbym zmodyfikować w locie pole StockCode iw tym celu mam w kodzie za sobą:

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

Ale komórki danych odpowiadające StockCode są puste. Teraz próbowałem debugować i z jakiegoś powodu kod znajduje tylko wartość wiersza nagłówka. Wartości pozostałych wierszy to string.Empty lub &nsbp. Czy może to zależeć od Listy jako DataSource?

0
CiccioMiami 28 sierpień 2012, 17:00

1 odpowiedź

Myślę, że w zdarzeniu GridView RowDataBound, ponieważ powiązanie jest nadal w toku, nie otrzymujesz żadnej wartości ... Sugeruję użycie "DataRowView"

DataRowView drv = (DataRowView)e.Row.DataItem;
e.Row.Cells(2).Text = drv["StockCode"].ToString();
1
Amol Kolekar 28 sierpień 2012, 17:26