用于访问 ItemTemplate 和 EditItemTemplate 中的控件的 Gridview 事件?

Gridview event to access controls in ItemTemplate & EditItemTemplate?

是否有一个 gridview 事件可以在 ItemTemplateEditItemTemplate 中访问控件而无需额外的代码(即会话、视图状态等)?

假设我的 gridview 看起来像这样:

<asp:GridView ID="GridView_Sales" runat="server" 
AutoGenerateColumns="False" 
DataKeyNames="SalesId" 
OnRowDataBound="OnRowDataBound"
OnRowEditing="GridView_NSB_RowEditing"
OnRowUpdating="GridView_NSB_RowUpdating" 
OnRowCommand="GridView_NSB_RowCommand">
    <Columns>
        <asp:TemplateField HeaderText="Sold">
            <ItemTemplate>
                <asp:Label ID="Label_WasSold" runat="server" Text='<%# Eval("WasSold").ToString() %>'>
                </asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList_Sold" runat="server">
                    <asp:ListItem Value="Yes"> </asp:ListItem>
                    <asp:ListItem Value="No"> </asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

GridView_RowDataBound 可以访问 ItemTempplate 中的 Label_WasSold,但不能访问 EditItemTemplate 中的下拉菜单。 GridView_RowEditing 可以访问 DropDownList_Sold 但不能访问 Label_WasSold;与 GridView_RowUpdating.

相同

我想在进行更新时将 Label_WasSold.Text 中的值与 DropDownList_Sold.SelectedValue 中的值进行比较,而无需添加更多代码或将会话变量从一个地方拖到另一个地方。

只需在 EditTemplate 中添加一个隐藏字段来存储 WasSold 数据项的值,如下面的代码所示。

在您的 RowUpdating 事件中,您可以找到隐藏字段并获取其值,然后将其与下拉值进行比较。

用于在 EditTemplate 中包含隐藏字段的标记

    <asp:TemplateField HeaderText="Sold">
        <ItemTemplate>
            <asp:Label ID="Label_WasSold" runat="server" Text='<%# Eval("WasSold").ToString() %>'>
            </asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:HiddenField id="hdnWasSold" runat="server"  Value='<%# Eval("WasSold").ToString() %>' />
            <asp:DropDownList ID="DropDownList_Sold" runat="server">
                <asp:ListItem Value="Yes"> </asp:ListItem>
                <asp:ListItem Value="No"> </asp:ListItem>
            </asp:DropDownList>
        </EditItemTemplate>

获取RowUpdating事件中隐藏字段值的C#代码

HiddenField hdnWasSold = (HiddenField)GridView_Sales.Rows[e.RowIndex].FindControl("hdnWasSold");
string wasSoldValue = hdnWasSold.Value;