簡體   English   中英

在ASP.NET中總計GridView

[英]Totaling a GridView in ASP.NET

在我的一個ASP.NET Web應用程序中,我使用BulkEditGridView (一個GridView允許同時編輯所有行)來實現訂單。 在我的網格中,我有一列來計算每個項目的總計(成本x數量),並在頁面底部顯示一個總計字段。 但是,當前,這些字段僅在每次回發時刷新。 我需要動態更新這些字段,以便隨着用戶更改數量,總計和總計總計進行更新以反映新的值。 我嘗試使用AJAX解決方案來完成此任務,但是異步回發會干擾頁面上的焦點。 我想象存在一個純粹的客戶端解決方案,並且希望社區中的某人可以共享。

如果您的計算結果可以用JavaScript復制,那么最簡單的方法就是使用jQuery來獲取所有類似的項目:

$("#myGridView input[type='text']").each(function(){
  this.change(function(){
    updateTotal(this.value);
  });
});

或者,如果您的計算過於復雜而無法在JavaScript中完成(或由於時間限制而無法做到),那么對Web服務進行AJAX調用是最佳方法。 可以說我們有這樣的網絡服務:

[WebMethod, ScriptMethod]
public int UpdateTotal(int currTotal, int changedValue){
  // do stuff, then return
}

您將需要一些JavaScript來調用Web服務,您可以使用jQuery或MS AJAX來實現。 我將展示兩者的組合,只是為了好玩:

$("#myGridView input[type='text']").each(function(){
  this.change(function(){
    Sys.Net.WebServiceProxy.invoke(
      "/Helpers.asmx",
      "UpdateTotal",
      false,
      { currTotal: $get('totalField').innerHTML, changedValue: this.value },
      showNewTotal
    );
  });
});

function showNewTotal(res){
  $get('totalField').innerHTML = res;
}

請查看此鏈接以獲取有關Sys.Net.WebServiceProxy.invoke方法的完整信息: http : //www.asp.net/AJAX/Documentation/Live/ClientReference/Sys.Net/WebServiceProxyClass/WebServiceProxyInvokeMethod.aspx

一種解決方案是在您的RowDataBound方法中構建一些javascript,以在文本框更改時不斷更新這些總數。

因此,在RowDataBound期間,開始在內存中構建一個javascript字符串,它將添加您需要添加的文本框。 RowDataBound的優點是,您可以通過調用TextBox.ClientId獲得這些文本框的客戶端ID。 將此javascript添加到頁面,然后還將onkeyup事件添加到調用此腳本所需的每個文本框。

像這樣(這是gridview中的行綁定事件)

private string _jscript;
protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
      //Get your textbox
      Textbox tb = e.Row.FindControl("tbAddUp");
      //Add the event that you're going to call to this textbox's attributes
      tb.Attributes.Add("onkeyup", "MyAddUpJavaScriptMethod();");
      //Build the javascript for the MyAddUpJavaScriptMethod
      jscript += "document.getElementById('" + tb.ClientId + '").value + ";
   }
}

然后,一旦您構建了整個腳本,就可以使用Page.ClientScript類向您的頁面添加一個方法,該方法將由您的onkeyup在文本框“ MyAddUpJavaScriptMethod”中調用

希望有意義並有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM