GridView的事件中的ItemTemplate和EditItemTemplate里的访问控制?

时间:2019-01-30 18:44:22

标签: c# asp.net gridview visual-studio-2012

是否有一个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可以访问Label_WasSold中的ItemTempplate,但不能访问EditItemTemplate中的下拉列表。 GridView_RowEditing有权访问DropDownList_Sold,但不能访问Label_WasSold;用相同的GridView_RowUpdating

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

1 个答案:

答案 0 :(得分:1)

只需在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>

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

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