用于访问 ItemTemplate 和 EditItemTemplate 中的控件的 Gridview 事件?
Gridview event to access controls in ItemTemplate & EditItemTemplate?
是否有一个 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
可以访问 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;
是否有一个 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
可以访问 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;