Totaliser un GridView dans ASP.NET
-
02-07-2019 - |
La solution
Si vos calculs peuvent être reproduits en JavaScript, la méthode la plus simple consiste à utiliser jQuery pour obtenir tous les éléments tels que:
$("#myGridView input[type='text']").each(function(){
this.change(function(){
updateTotal(this.value);
});
});
Ou si vos calculs sont trop complexes pour être effectués en JavaScript (ou que des contraintes de temps l’empêchent de le faire), alors un appel AJAX à un service Web est la meilleure solution. Disons que nous avons notre service Web comme ceci:
[WebMethod, ScriptMethod]
public int UpdateTotal(int currTotal, int changedValue){
// do stuff, then return
}
Vous aurez besoin de JavaScript pour appeler le service Web. Vous pouvez le faire avec jQuery ou MS AJAX. Je vais montrer une combinaison des deux, juste pour le plaisir:
$("#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;
}
Consultez ce lien pour obtenir des informations complètes sur la méthode Sys.Net.WebServiceProxy.invoke: http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys.Net/WebServiceProxyClass/WebServiceProxyInvokeMethod.aspx
Autres conseils
Une solution consiste à créer du javascript dans votre méthode RowDataBound afin de mettre à jour constamment ces totaux lorsque les zones de texte changent.
Donc, pendant le RowDataBound, commencez à créer une chaîne javascript en mémoire qui additionnera les zones de texte à ajouter. Ce qui est bien dans RowDataBound, c'est que vous pouvez obtenir l'identifiant client de ces zones de texte en appelant TextBox.ClientId. Ajoutez ce javascript à la page, puis ajoutez également un événement onkeyup à chaque zone de texte requise pour appeler ce script.
Donc, quelque chose comme (c'est un événement lié à une ligne depuis un 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 + ";
}
}
Puis, une fois que vous avez construit tout ce script, utilisez votre classe Page.ClientScript pour ajouter une méthode à votre page, qui sera appelée par votre onkeyup dans vos zones de texte " MyAddUpJavaScriptMethod "
.L’espoir est logique et utile