GridView隱藏欄位(Visible="Flase")後取不到值的替代方法

有時我們需要在GridView中設置欄位來取值,以作為後續動作的資料來源判斷依據,但又不想在使用者瀏覽時顯示此欄位。例:GridView中使用BoundField 來取得存檔日期的值同時將其欄位設為不顯示,<asp:BoundField DataField="存檔日期" Visible="false" />。這時在GridView的RowDataBound事件中使用e.Row.Cells(0).Text的方式取值會發現無法順利取到值。

因此需要使用另一種替代方式來達到此目的的實現,在Asp.Net中有個專為隱藏數值設計的控制項HiddenField,我們要作的就是將原本<asp:BoundField DataField="存檔日期" Visible="false" />的資料繫結方式改為使用HiddenField的Value值與存檔日期繫結,並將此HiddenField控制項置於GridView的TemplateField中。

<asp:TemplateField>
    <ItemTemplate>
        <asp:HiddenField ID="SaveTime" runat="server" Value='<%# Eval("存檔日期") %>' />
    </ItemTemplate>
</asp:TemplateField>


如此便可在GridView的RowDataBound事件中使用FindControl的方式來取得GridView各個欄位中的存檔日期值。



Protected Sub GridView_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Response.Write(CType(e.Row.FindControl("SaveTime"), HiddenField).Value)
    End If
End Sub

0 意見:

張貼意見