내용의 GridView 세포를 찾을 수없는 내가 가지고있는 다음 GridView
, DataSource
List<T>
등 : 올바르게 렌더링의 GridView RowDataBound 이벤트 핸들러는
<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>
적절한 값.
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
그러나 StockCode에 해당하는 데이터 셀이 비어 :
지금, 나는 뒤에 내 코드에있는 필드 비행 StockCode과 그렇게하기 위해 수정하고 싶습니다 . 이제 디버깅을 시도하고 어떤 이유로 코드가 헤더 행의 값을 찾습니다. 다른 행의 값은 string.Empty
또는 & nsbp입니다. 그것은 DataSource로 List에 의존할까요?
If e.Row.RowType = DataControlRowType.DataRow Then
Dim lblStockCode = DirectCast(e.Row.FindControl("lblStockCode"), Label)
lblStockCode.Text = StockCodeConverter.Convert(lblStockCode.Text)
End If
:
<asp:TemplateField HeaderText="Stock Code">
<ItemTemplate>
<asp:Label Id="LblStockCode" runat="server" Text='<%# Eval("StockCode") %>'></asp:label>
</ItemTemplate>
</asp:TemplateField>
당신은 심지어 영문에 Eval
을 생략하고 코드 숨김에서 완전히 Text
속성을 설정할 수 있습니다 :
확인 감사를 사용하는 것이 좋습니다 것입니다! 어쨌든 왜 값을 찾지 못하는지 설명해 주시겠습니까? 나중에 DataBind가 발생합니까? – CiccioMiami
@CiccioMiami : 'TemplateField'는 ID를 통해 액세스 할 수있는 컨트롤을 포함하고 있기 때문입니다. 그것을 사용하지 않으려면'BoundField'를 사용할 수 있습니다. 그러면 셀의'Text' 속성은 비어 있지 않습니다. –
나는 그것을 알지 못했다. 웹은 rowdatabound에 대한 예제로 가득하지만,이 상황의 범위에있는 것은 하나도 없다. 설명 주셔서 감사합니다! – CiccioMiami