Problème récurrent auquel presque tout développeur à du faire face un jour.
Il existe une solution simple demandant peu de javascript et C#, mais surtout qui permet d’être facilement réutilisable. Ici un exemple pour faire la somme de cinq colonnes.
La gridview
Celle-ci contient des Templates de ligne. Le Template d’édition contient une TextBox. De plus il ne faut pas oublier d’associé l’événement rowdatabound avec la function DataGridBudget_RowDataBound présenté plus bas.
Section Javascript
Dans la page Aspx :
<script language="javascript" type="text/javascript" >
function CalculateFloatTotal(ListId,DestinationId)
{
var ElementTable = new Array();
//Récupération des objets
for ( var n in ListId )
{
ElementTable[n] = document.getElementById(ListId[n]);
}
var ValuesTables = new Array();
//récupération des valeurs
for ( var n in ElementTable )
{
if(ElementTable[n].value!=null)
ValuesTables[n] = parseFloat(ElementTable[n].value);
//test des valeurs
if(isNaN(ValuesTables[n])||ValuesTables[n]==0)
ValuesTables[n]=0;
}
var total = 0;
//Somme
for ( var n in ValuesTables )
{
total += ValuesTables[n];
}
//Affichage
var elemntDestination = document.getElementById(DestinationId);
elemntDestination.value = total.toFixed(2);
}
</script>
Section C#
Et dans le code behind :
/// <summary>
/// Liaison des données des lignes
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DataGridBudget_RowDataBound(object sender, GridViewRowEventArgs e)
{
//Insertion de code javascript pour le calcul automatique des totaux de lignes
if (e.Row.RowType == DataControlRowType.DataRow)
{
TextBox Txt_TotalAnnuite = (TextBox)e.Row.FindControl("Txt_TotalAnnuite");
TextBox txt_travaux1 = (TextBox)e.Row.FindControl("txt_travaux1");
TextBox txt_travaux2 = (TextBox)e.Row.FindControl("txt_travaux2");
TextBox Txt_Taxe_Municipal = (TextBox)e.Row.FindControl("Txt_Taxe_Municipal");
TextBox Txt_TotalAnnuelHotel = (TextBox)e.Row.FindControl("Txt_TotalAnnuelHotel");
String l_ListClientId =
"['" + Txt_TotalAnnuite.ClientID
+ "', '" + Txt_Taxe_Municipal.ClientID
+ "', '" + txt_travaux1.ClientID
+ "', '" + txt_travaux2.ClientID
+ "'],'" + Txt_TotalAnnuelHotel.ClientID + "'";
Txt_TotalAnnuite.Attributes.Add("onblur", string.Format("CalculateFloatTotal({0})", l_ListClientId));
txt_travaux1.Attributes.Add("onblur", string.Format("CalculateFloatTotal({0})", l_ListClientId));
txt_travaux2.Attributes.Add("onblur", string.Format("CalculateFloatTotal({0})", l_ListClientId));
Txt_Taxe_Municipal.Attributes.Add("onblur", string.Format("CalculateFloatTotal({0})", l_ListClientId));
}
}
Aucun commentaire:
Enregistrer un commentaire