ASP.NET Gridview:如何停止<;span></span>;在Gridview中,是否可以在发回时重置?

ASP.NET Gridview:如何停止<;span></span>;在Gridview中,是否可以在发回时重置?,asp.net,gridview,postback,Asp.net,Gridview,Postback,我有一个Gridview,其中包含一些控件,当用户从Gridview中进行选择时,这些控件会从服务器更新 在从下拉列表中进行选择之后,用户可以在一行的文本框中输入一个百分比,我有一些javascript,它可以执行一些计算并输出到Gridview中项目模板内的范围 这一切都是可行的,但如果用户在任何一行上进行另一个下拉列表选择,gridview中的所有跨距都将重置为空白(我尝试了各种控件,包括asp.net和html) 这些都在更新面板中 代码: 0 查看您的下拉列表选择是否有任何回发 如

我有一个Gridview,其中包含一些控件,当用户从Gridview中进行选择时,这些控件会从服务器更新

在从下拉列表中进行选择之后,用户可以在一行的文本框中输入一个百分比,我有一些javascript,它可以执行一些计算并输出到Gridview中项目模板内的范围

这一切都是可行的,但如果用户在任何一行上进行另一个下拉列表选择,gridview中的所有跨距都将重置为空白(我尝试了各种控件,包括asp.net和html)

这些都在更新面板中

代码:


0

查看您的下拉列表选择是否有任何回发

如果是,则范围值将消失,因为范围不是ASP.NET网络控制。页面回发后,asp.net webcontrol值将从ViewState恢复。因此,跨度没有ViewState,也不会恢复任何值。 您可以尝试将标记更改为

 <span runat="server" id="spanIDHere">SomeValue here</span>
SomeValue在这里
runat=“server”使span成为HtmlGenericControl并保持其视图状态


如果使用Javascript更新跨度值,则回发后不会保存跨度值。您应该调用服务器端函数来更新span值或尝试使用隐藏字段来存储您的值。

您可以使用“AutoPostBack”属性来控制某些控件的回发事件。

从您的问题中,我了解到您是在用javascript进行计算并将其分配给span,但是当下次回发发生时,该值不会保留…如果我是对的,我建议您尝试以下步骤。使用HiddenFields也可以指定值,因为HiddenFields在回发期间保留值

  • 在项目模板中添加隐藏字段

  • 将“calculate”函数从Codebehind(来自rowdatabound事件)设置为Textbox,并将currosponding HiddenField值作为calculate传递给它(这是“HiddenFieldId”)

    Javascript:

  • 将计算值指定给隐藏字段

         function calculate(hdnID)
          {
             var CalcValue=//do your Calculation
             document.getElementByID(hdnID).Value=CalcValue;
          }
    
    3.在下拉回发事件中,再次绑定GridView


    上面的代码应该可以解决您面临的问题。

    将span更改为runat=“server”仍然无法保留该值,我以前曾尝试使用asp.net标签将该值存储在中,但这也不起作用。我添加了Gridview代码,您还想看些什么吗?如果使用Javascript更新span值,然后它只在客户端工作。回发后,服务器端将看不到这些值。您需要调用一些服务器端函数或尝试使用隐藏字段。但是回发需要进行,我只需要保留通过javascript更新的控件中的值。我认为您可以将控件值保留在viewstate或sessions中,然后在回发时将其加载回问题是我没有将任何数据绑定到网格,我只是在下拉列表的选定索引上填充一些值。因此RowDataBound没有被激发。我看到您没有绑定GridView,并且您希望保留值,您仍然可以将值分配给HiddenField,并且在pageload中的回发后将该HiddenField值分配回Span…使用“GridViewRow”GridViewRow selectRow=grd.Rows(索引)。HtmlGenericControl spnKj=(HtmlGenericControl)selectRow.Cells[3].FindControl(“spnKj”);spnKj.innerHTML=HiddenField值;
    protected void grd_RowDataBound(object sender,GridViewRowEventArgs e)                   
     {              
              if (e.Row.RowType == DataControlRowType.DataRow)        
               {            
                  HiddenField hdn = ((HiddenField)e.Row.FindControl("HiddenFieldID"));   
    
                  TextBox txtPercentage = (TextBox)e.Row.FindControl("txtPercentage");
    
                   HtmlGenericControl spnKj=(HtmlGenericControl )e.Row.FindControl("spnKj");
    
                  txtPercentage.Attributes["onClick"]="calculate(this,'"+hdn .ClientID+"');"   
    
                  spnKj.innerHTML=hdn.Value;
               }
    
     }
    
         function calculate(hdnID)
          {
             var CalcValue=//do your Calculation
             document.getElementByID(hdnID).Value=CalcValue;
          }