Событие Gridview для доступа к элементам управления в ItemTemplate & EditItemTemplate? - PullRequest
0 голосов
/ 30 января 2019

Есть ли одно событие gridview, которое может получить доступ к элементу управления в ItemTemplate и EditItemTemplate без дополнительного кода (т. Е. Сессия, viewstate и т. Д.)?

Скажем, мой 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 голосов
/ 30 января 2019

Просто добавьте скрытое поле в 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;
...