2008-09-29 66 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”

希望是有道理的,并有助于