[英]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.