ASP.NETでGridViewを合計する
-
02-07-2019 - |
解決
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
}
Webサービスを呼び出すにはJavaScriptが必要です。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"
意味があり、役立つ希望