fdkgfosfskjdlsjdlkfsf
fdkgfosfskjdlsjdlkfsf

Reputation: 3303

Gridview event to access controls in ItemTemplate & EditItemTemplate?

Is there one gridview event that can access a control in ItemTemplate and EditItemTemplate without additional code (ie. session, viewstate, etc)?

Let's say my gridview looks like this:

<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 has access to Label_WasSold in ItemTempplate but not the dropdown in EditItemTemplate. GridView_RowEditing has access to DropDownList_Sold but not to Label_WasSold; the same thing with GridView_RowUpdating.

I want to compare the value in Label_WasSold.Text to the value in DropDownList_Sold.SelectedValue when doing an update without having to add more code or drag session variables from one place to another.

Upvotes: 1

Views: 452

Answers (1)

Sunil
Sunil

Reputation: 21406

Just add a hidden field to EditTemplate that stores the value of WasSold data item as in code below.

In your RowUpdating event, you can find the hidden field and get its value, then compare it with drop down value.

Markup to include hidden field in 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# code to get the hidden field value in RowUpdating event

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

Upvotes: 2

Related Questions