是否有一个gridview事件可以访问ItemTemplate
和EditItemTemplate
中的控件而无需其他代码(例如,会话,视图状态等)?
比方说我的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
中的值进行比较,而不必添加更多代码或将会话变量从一个地方拖到另一个地方。
答案 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;