Asp.net Gridview行、切换按钮文本和行属性在回发时恢复为原始-如何修复?
这很奇怪。我有一个gridview,每行都有项目模板复选框和按钮。我使用JQuery切换按钮的文本值,JQuery表示用户向购物车添加行以进行购买。我在表单上有一个与gridview分离的按钮,当单击该按钮时,会在代码中引发一个事件,以旋转行并处理选定的切换按钮文本行。但按下“处理”按钮后,网格行将恢复到其原始状态原始按钮文本,并修改了先前选定行的行属性。我不是在重新绑定网格。这也不是一个更新网格。现在,复选框一直工作得很好,但按钮文本显然非常不同。谁能告诉我为什么会发生这种情况,以及我如何纠正它?我的一个想法是创建一列隐藏的复选框,当我切换按钮文本时,我也可以切换复选框。但我真希望我能理解为什么会发生这种事。此外,在已选中“处理”按钮的回发中,屏幕也将以其原始状态呈现 这是我的表格,带有复选框和按钮:Asp.net Gridview行、切换按钮文本和行属性在回发时恢复为原始-如何修复?,asp.net,gridview,Asp.net,Gridview,这很奇怪。我有一个gridview,每行都有项目模板复选框和按钮。我使用JQuery切换按钮的文本值,JQuery表示用户向购物车添加行以进行购买。我在表单上有一个与gridview分离的按钮,当单击该按钮时,会在代码中引发一个事件,以旋转行并处理选定的切换按钮文本行。但按下“处理”按钮后,网格行将恢复到其原始状态原始按钮文本,并修改了先前选定行的行属性。我不是在重新绑定网格。这也不是一个更新网格。现在,复选框一直工作得很好,但按钮文本显然非常不同。谁能告诉我为什么会发生这种情况,以及我如何纠正
<div class="OneHundredPercentWide" style="padding-top:7px">
<asp:Panel ID="Panel1" runat="server" Width="100%" >
<asp:GridView id="grvSessionOrderDownloads" runat="server" BorderWidth="2px" BorderStyle="Solid" BorderColor="#C0C0FF"
Font-Names="Arial" Font-Bold="True" Font-Size="8pt" GridLines="Horizontal" AutoGenerateColumns="False"
HorizontalAlign="Left" ForeColor="Blue" CellPadding="2" AllowSorting="True" Width="100%"
OnRowDataBound="grvSessionOrderDownloads_OnRowDataBound" DataKeyNames="SORD_ID">
<HeaderStyle Font-Names="Arial" HorizontalAlign="Center" ForeColor="White" BackColor="#152EE5"
CssClass="sessionOrderDownloadHeaders" />
<RowStyle BackColor="White" ForeColor="#333333" />
<AlternatingRowStyle BackColor="#A5B0FF" />
<Columns>
<asp:BoundField Visible="False" DataField="SORD_ID" HeaderStyle-Width="0px" >
<HeaderStyle Width="0px" />
</asp:BoundField>
<asp:TemplateField HeaderText="Select <br /> Files" HeaderStyle-ForeColor="White" >
<ItemTemplate >
<asp:CheckBox ID="chkSelectVideo" runat="server" OnClick="checkboxClicked(this)" ToolTip="Select file for download"
Enabled='<%# Eval("SORD_EnableSelectionCheckBox") %>' Checked='<%# Eval("SORD_SelectedForDownloadFlag") %>' />
</ItemTemplate>
<HeaderStyle Width="6%" />
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField><asp:TemplateField HeaderText="Prior <br /> Downld" HeaderStyle-ForeColor="White" >
<ItemTemplate >
<asp:Button id="btnBuy" runat="server" OnClientClick="btnBuyToggle(this); return false;"
Text="BUY This" CssClass="buyButton" Visible='<%# Eval("SORD_ShowBuyButton") %>' />
</ItemTemplate>
<HeaderStyle Width="7%" />
<ItemStyle CssClass="sessionOrderDownloadItems" VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
谢谢,,
Jim一旦在浏览器中更改了复选框更改,就会将其发回服务器。但是,当您使用JS更改网格中按钮或其他字段的文本时,更改的按钮文本或其他字段不会发送到服务器。因此,当按钮在下一次回发中呈现时,它使用原始默认值,即BUY This
为了保留按钮文本,您必须随按钮一起创建一个隐藏字段。在OnClientClick JS事件中更改按钮的文本时,同时更改隐藏字段的值。隐藏字段的更改将发送到服务器,这有助于您在流程按钮单击事件中读取这些更改。当您单击按钮时,它将发回以刷新页面。在客户端执行的任何操作都将消失。在哪个事件中,您将Gridview与datasource绑定?如果不回发,我将在页面加载时绑定网格。我没有在任何事件上做任何进一步的重新绑定,没有行更新等。但是我的复选框更改在单击按钮时通过ok,为什么它们不同?我想我会尝试使用一组隐藏的复选框,我会用gridview按钮切换这些复选框。然后我希望我能在点击过程按钮上阅读它们。明白了,谢谢你的解释。我应该能按你解释的那样做。非常感谢你。吉姆
Dim gvr As GridViewRow
For Each gvr In grvSessionOrderDownloads.Rows
Dim selBtn As Button = CType(gvr.FindControl("btnBuy"), Button)
If Not selBtn Is Nothing Then
If selBtn.Enabled And selBtn.Visible Then
Dim strSORD_ID As String = grvSessionOrderDownloads.DataKeys(gvr.RowIndex)("SORD_ID").ToString
If selBtn.Text = "BUY Video" Then
// Note: I will process here
End If
End If
End If
Next