2008-09-29 58 views
2

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

回答

3

如果你的計算可以在JavaScript中最簡單的方法將使用jQuery來得到所有這樣的項目被複制:

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

或者,如果您的計算方式太複雜而無法在JavaScript中完成(或時間限制阻止),那麼AJAX調用Web服務是最好的方法。比方說,我們有我們的Web服務是這樣的:

[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

1

一種解決方案是在您的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」

希望是有道理的,並有助於