IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Valeur asp:textbox calculée automatiquement [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut Valeur asp:textbox calculée automatiquement
    Bonjour,

    Je cherche à afficher une valeur dans un textbox de ma page. Cette valeur doit être calculé automatiquement sur base de valeurs introduites dans d'autres textbox de la même page.

    J'ai essayé d'utiliser l’événement ontextchanged et autopostback à true des textbox mais je perds le focus.

    J'ai également essayé d'utiliser une WebMethod avec un appel Javascript mais je ne parvient pas à récupérer les valeurs des textbox nécessaires au calcul.

    Pourriez-vous me dire si je pourrai trouver un tuto quelque part ou m'indiquer une méthode pour parvenir à réaliser cela.

    D'avance merci.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu peux le faire avec un peu de jQuery. Met le code suivant entre les balises <head> et </head> :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>
     
    <script type="text/javascript">
        $(document).ready(function() {
            // On récupère les controls TextBox à l'aide de leur ClientID
            var txt1 = $("#<%= TextBox1.ClientID %>");
            var txt2 = $("#<%= TextBox2.ClientID %>");
            var txt3 = $("#<%= TextBox3.ClientID %>");
            var txt4 = $("#<%= TextBox4.ClientID %>");
     
            // On abonne la méthode Compute à l'évènement OnChange de chaque TextBox (à chaque fois que OnChange est appelé, on va relancer le calcul)
            if (txt1 != null)
                txt1.bind("change", Compute);
            if (txt2 != null)
                txt2.bind("change", Compute);
            if (txt3 != null)
                txt3.bind("change", Compute);
     
            // Teste si la valeur est un nombre ou non. Si oui on retourne le nombre, si non, on retourne 0
            function IsNumeric(value) {
                return parseInt(!$.isNumeric(value) ? 0 : value);
            };
     
            // Exécute le calcul et affiche le résultat dans txt4
            function Compute() {
                // On récupère les valeurs des TextBox
                var tb1Value = IsNumeric(txt1.val());
                var tb2Value = IsNumeric(txt2.val());
                var tb3Value = IsNumeric(txt3.val());
     
                // On additionne
                var result = tb1Value + tb2Value + tb3Value;
     
                // On affiche le résultat dans la TextBox txt4
                txt4.val(result);
            };
        });
    </script>
    Dans la page, j'ai 4 controls TextBox :
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <asp:TextBox ID="TextBox1" runat="server" /><br />
    <asp:TextBox ID="TextBox2" runat="server" /><br />
    <asp:TextBox ID="TextBox3" runat="server" /><br />
    <asp:TextBox ID="TextBox4" runat="server" />
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Merci pour votre réponse.

    Pour le premier élément script, l'attribut type c'est text/javascript ?

    Est-il possible d'utiliser cette méthode dans un GridView avec des TemplateField?
    (Pour l'édition des valeur dans la GridView).
    Car j'ai l'impression que l'ID des textbox utilisés change à chaque ligne.

    De plus, même en utilisant un textbox n'étant pas dans un gridview, mais dans un detailsview, j'obtiens l'erreur suivantes : The name 'xxx' does not exist in the current context

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par miniil Voir le message
    Pour le premier élément script, l'attribut type c'est text/javascript ?
    Oui c'est ça, mais il n'est pas obligatoire de le mettre.
    Citation Envoyé par miniil Voir le message
    Est-il possible d'utiliser cette méthode dans un GridView avec des TemplateField?
    (Pour l'édition des valeur dans la GridView).
    Car j'ai l'impression que l'ID des textbox utilisés change à chaque ligne.
    Oui c'est faisable mais le principe est légèrement différent. Tu aurais dû préciser que tu étais dans un GridView...
    Citation Envoyé par miniil Voir le message
    De plus, même en utilisant un textbox n'étant pas dans un gridview, mais dans un detailsview, j'obtiens l'erreur suivantes : The name 'xxx' does not exist in the current context
    Avec un DetailsView c'est le même principe que pour un GridView, mais bon forcément avec l'exemple que j'ai mis en me basant sur les infos que tu as donné, ça ne risque pas de fonctionner.

    Quel est ton besoin au final ? Parce que là, on ne comprend plus rien.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Voici le code actuel de ma page aspx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ManageServices.aspx.cs" Inherits="RFCKPIWebApp.Incidents.Choices.ManageServices" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
     
    <script language="javascript" type="text/javascript">
        function NbHours() {
            var HFrom = document.getElementById("MainContent_ServiceDetailsView_HFromTimeTextBox");
            var MFrom = document.getElementById("MainContent_ServiceDetailsView_MFromTimeTextBox");
            var HTo = document.getElementById("MainContent_ServiceDetailsView_HToTimeTextBox");
            var MTo = document.getElementById("MainContent_ServiceDetailsView_MToTimeTextBox");
     
            PageMethods.GetNbHours(HFrom.value, MFrom.value, HTo.value, MTo.value, OnSuccess, OnError);
            return false;
        }
        function OnSuccess(response) {
            var NbHours = document.getElementById("MainContent_ServiceDetailsView_NbHoursTextBox");
            NbHours.value = response;
        }
        function OnError(error) {
            alert(error);
        }
     
        function nbHoursGridView() {
            var HFrom = document.getElementById('<%# ((GridViewRow)Container).FindControl("HFromTimeTextBoxGridView").ClientID %>');
            alert(HFrom.value);
        }
    </script>
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
     
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" EnablePartialRendering="true"/>
     
    <h2>Gestion des services</h2>
    <br />
    <div style="float:left; margin-right: 20px;">
    <h3>Editer et supprimer</h3><br />
        <asp:GridView ID="ServicesGridView" runat="server" AllowPaging="True" 
            AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="S_ID" 
            DataSourceID="ServicesEntityDataSource" PageSize="20" CellPadding="4" 
            ForeColor="#333333" GridLines="None" 
            onrowdeleted="ServicesGridView_RowDeleted">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <asp:CommandField CancelText="Annuler" DeleteText="Supprimer" EditText="Modifier" ShowDeleteButton="True" ShowEditButton="True" UpdateText="Mettre à jour" />
                <asp:BoundField DataField="S_ID" HeaderText="ID" ReadOnly="True" SortExpression="S_ID" />
                <asp:BoundField DataField="S_SERVICE" HeaderText="Service" SortExpression="S_SERVICE" />
                <asp:BoundField DataField="S_DAYS" HeaderText="Nombre de jours" 
                    SortExpression="S_DAYS" >
                <HeaderStyle HorizontalAlign="Center" Width="50px" />
                </asp:BoundField>
                <asp:TemplateField HeaderText="DE" SortExpression="S_FROMTIME">
                    <EditItemTemplate>
                        <asp:TextBox ID="HFromTimeTextBoxGridView" runat="server" Text="00" onblur="nbHoursGridView()"
                            Width="15px" oninit="HFromTimeTextBoxGridView_Init" />
                            <asp:Label ID="HFromTimeLabelGridView" runat="server" Text=" : " />
                            <asp:TextBox ID="MFromTimeTextBoxGridView" runat="server" Text="00" onblur="nbHoursGridView()"
                            Width="15px" oninit="MFromTimeTextBoxGridView_Init" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="HFromLabelGridView" runat="server" Text='<%# Bind("S_FROMTIME") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="A" SortExpression="S_TOTIME">
                    <EditItemTemplate>
                        <asp:TextBox ID="HToTimeTextBoxGridView" runat="server" Text="00" Width="15px" onblur="nbHoursGridView()"
                            oninit="HToTimeTextBoxGridView_Init" />
                        <asp:Label ID="HToTimeLabelGridView" runat="server" Text=" : " />
                        <asp:TextBox ID="MToTimeTextBoxGridView" runat="server" Text="00" Width="15px" onblur="nbHoursGridView()"
                            oninit="MToTimeTextBoxGridView_Init" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="HToLabelGridView" runat="server" Text='<%# Bind("S_TOTIME") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Nombre d'heures" SortExpression="S_NBHOURS">
                    <EditItemTemplate>
                        <asp:TextBox ID="NbHoursTextBoxGridView" runat="server" Text='<%# Bind("S_NBHOURS") %>' Width="30px"></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("S_NBHOURS") %>'></asp:Label>
                    </ItemTemplate>
                    <HeaderStyle HorizontalAlign="Center" Width="50px" />
                </asp:TemplateField>
                <asp:BoundField DataField="S_USERS" HeaderText="Nombre d'utilisateurs" 
                    SortExpression="S_USERS" >
                <HeaderStyle HorizontalAlign="Center" Width="50px" />
                </asp:BoundField>
            </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#1B7F75" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#1B7F75" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
        </asp:GridView>
    </div>
    <div>
    <h3>Ajouter</h3><br />
        <asp:DetailsView ID="ServiceDetailsView" runat="server" Height="50px" 
            Width="294px" AutoGenerateRows="False" DataKeyNames="S_ID" 
            DataSourceID="ServicesEntityDataSource" DefaultMode="Insert" 
            BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" 
            CellPadding="3" GridLines="Horizontal" 
            oniteminserted="ServiceDetailsView_ItemInserted">
     
            <AlternatingRowStyle BackColor="#F7F7F7" />
            <CommandRowStyle HorizontalAlign="Right" />
            <EditRowStyle BackColor="#1B7F75" Font-Bold="True" ForeColor="#F7F7F7" />
     
            <FieldHeaderStyle HorizontalAlign="Right" />
     
            <Fields>
                    <asp:BoundField DataField="S_SERVICE" HeaderText="Service :" 
                        SortExpression="S_SERVICE" />
                    <asp:BoundField DataField="S_DAYS" HeaderText="Nombre de jours :" 
                        SortExpression="S_DAYS" />
     
                    <asp:TemplateField HeaderText="DE :">
                        <InsertItemTemplate>
                            <asp:TextBox ID="HFromTimeTextBox" runat="server" Text="00" Width="15px" 
                                oninit="HFromTimeTextBox_Init" onblur="NbHours()"/>
                            <asp:Label ID="HFromTimeLabel" runat="server" Text=" : " />
                            <asp:TextBox ID="MFromTimeTextBox" runat="server" Text="00" Width="15px" 
                                oninit="MFromTimeTextBox_Init" />                 
                        </InsertItemTemplate>
                    </asp:TemplateField>
     
                    <asp:TemplateField HeaderText="A :">
                        <InsertItemTemplate>
                            <asp:TextBox ID="HToTimeTextBox" runat="server" Text="00" Width="15px" 
                                oninit="HToTimeTextBox_Init"  />
                            <asp:Label ID="HToTimeLabel" runat="server" Text=" : " />
                            <asp:TextBox ID="MToTimeTextBox" runat="server" Text="00" Width="15px" 
                                oninit="MToTimeTextBox_Init"  />                                                
                        </InsertItemTemplate>
                    </asp:TemplateField>
     
                    <asp:TemplateField HeaderText="Nombre d'heures :" SortExpression="S_NBHOURS">
                        <InsertItemTemplate>
                            <asp:TextBox ID="NbHoursTextBox" runat="server" Text='<%# Bind("S_NBHOURS") %>' 
                                oninit="NbHoursTextBox_Init" ReadOnly="True"></asp:TextBox>
                        </InsertItemTemplate>
                    </asp:TemplateField>
     
                    <asp:BoundField DataField="S_USERS" HeaderText="Nombre d'utilisateurs :" 
                        SortExpression="S_USERS" />
                    <asp:CommandField ButtonType="Button" CancelText="ANNULER" InsertText="AJOUTER" 
                        ShowInsertButton="True" />
                </Fields>
            <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
            <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
            <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
        </asp:DetailsView>
     
         <br />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server"
            HeaderText="Erreur(s) : "
            ShowMessageBox="false"
            DisplayMode="BulletList"
            ShowSummary="true"
            ForeColor="Red" />
        <asp:Label ID="ErrorLabel" runat="server" Text="" ForeColor="Red"></asp:Label>
    </div>
        <asp:EntityDataSource ID="ServicesEntityDataSource" runat="server" 
            ConnectionString="name=RFCKPIEntities" DefaultContainerName="RFCKPIEntities" 
            EnableDelete="True" EnableFlattening="False" EnableInsert="True" 
            EnableUpdate="True" EntitySetName="SERVICE">
        </asp:EntityDataSource>
    </asp:Content>
    Ce dont j'ai besoin exactement :

    Dans la GridView et dans la DetailsView, j'ai 4 textbox(avec ± le même nom) :
    HFrom (Pour heure de départ)
    MFrom (Pour minute de départ)
    HTo (Pour heure de fin)
    MTo (Pour minute de fin)

    Ces 4 textbox me permettent d'encoder une heure de début et une heure de fin.

    Dans la textbox portant le nom nbHours, je dois calculer automatiquement la différence entre ces deux heures pour donner un nombre d'heure.

    Dans ma page aspx actuelle, pour la detailsView, ça fonctionne en utilisant l'id que j'ai récupérer en affichant le code de ma page exécutée. Mais cette solution me parait brouillon. De plus, impossible de l'utiliser pour un gridView.

    A titre indicatif, voici le code cs pour ma page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Services;
    using System.Web.Script.Services;
     
    namespace RFCKPIWebApp.Incidents.Choices
    {
        [ScriptService]
        public partial class ManageServices : System.Web.UI.Page
        {
            private TextBox HFromTime;
            private TextBox MFromTime;
            private TextBox HToTime;
            private TextBox MToTime;
            private TextBox NbHoursTextBox;
            private TextBox HFromTimeGridView;
            private TextBox MFromTimeGridView;
            private TextBox HToTimeGridView;
            private TextBox MToTimeGridView;
     
     
            protected void Page_Load(object sender, EventArgs e)
            {
            }
     
            protected void ServiceDetailsView_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
            {
                ServicesGridView.DataBind();
            }
     
            protected void ServicesGridView_RowDeleted(object sender, GridViewDeletedEventArgs e)
            {
                if (e.Exception != null)
                {
                    ErrorLabel.Text = "Le service ne peut pas être supprimé (il est utilisé dans certains incidents).";
                    e.ExceptionHandled = true;
                }
                else
                {
                    ErrorLabel.Text = "";
                }
            }
     
            /**** INIT *****/
            protected void HFromTimeTextBox_Init(object sender, EventArgs e)
            {
                HFromTime = sender as TextBox;
            }
     
            protected void MFromTimeTextBox_Init(object sender, EventArgs e)
            {
                MFromTime = sender as TextBox;
            }
     
            protected void HToTimeTextBox_Init(object sender, EventArgs e)
            {
                HToTime = sender as TextBox;
            }
     
            protected void MToTimeTextBox_Init(object sender, EventArgs e)
            {
                MToTime = sender as TextBox;
            }
     
     
     
            protected void CalculerNombreHeures(object sender, EventArgs e)
            {       
                var fromTime = Convert.ToDateTime(HFromTime.Text + ":" + MFromTime.Text);
                var toTime = Convert.ToDateTime(HToTime.Text + ':' + MToTime.Text);
     
                var nbHours = toTime - fromTime;
     
                NbHoursTextBox.Text = Convert.ToString(nbHours);
     
                /*int nbHoursInt = nbHours.Hours;
     
                if (nbHoursInt == 0)
                    NbHoursTextBox.Text = "24";
                else
                    NbHoursTextBox.Text = "" + nbHoursInt;*/
            }
     
     
     
            protected void NbHoursTextBox_Init(object sender, EventArgs e)
            {
                NbHoursTextBox = sender as TextBox;
            }        
     
            protected void HFromTimeTextBoxGridView_Init(object sender, EventArgs e)
            {
                HFromTimeGridView = sender as TextBox;
            }
     
            protected void MFromTimeTextBoxGridView_Init(object sender, EventArgs e)
            {
                MFromTimeGridView = sender as TextBox;
            }
     
            [WebMethod]
            public static string GetNbHours(string HFromTime, string MFromTime, string HToTime, string MToTime)
            {
                var fromTime = Convert.ToDateTime(HFromTime + ":" + MFromTime);
                var toTime = Convert.ToDateTime(HToTime + ":" + MToTime);
     
                var nbHours = toTime - fromTime;
     
                return Convert.ToString(nbHours);
            }
     
            protected void HToTimeTextBoxGridView_Init(object sender, EventArgs e)
            {
                HToTimeGridView = sender as TextBox;
            }
     
            protected void MToTimeTextBoxGridView_Init(object sender, EventArgs e)
            {
                MToTimeGridView = sender as TextBox;
            }
     
     
     
        }
    }
    J'espère avoir été plus claire

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Merci pour toutes ces infos. Maintenant que souhaites-tu faire exactement ?

    Parce que d'après ce que je comprends, tu veux faire un calcul côté client sur le DetailsView, pour calculer le nombre d'heures et l'afficher dans NbHoursTextBox. C'est bien ça ?

    A quoi sert tout le reste, et en particulier les WebMethod qui agissent sur le GridView ? Si tu veux faire le calcul dans le GridView, il est plus simple et plus judicieux de le faire dans le code behind.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    En fait, je veux pouvoir faire les deux : Le calcul si on édite une ligne dans la GridView et le calcul dans la detailsView.

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pour le calcul dans le GridView, il vaut mieux le faire côté serveur, pendant l'évènement RowDataBound.

    Ensuite pour le DetailsView, voici le jQuery à utiliser (désolé je ne suis pas fan du Javascript pur ), toujours entre les balises head :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>
     
    <script type="text/javascript">
        $(document).ready(function() {
            // On récupère les controls TextBox à l'aide de leur ClientID
            var txtFromTime = $('#<%= ((TextBox)ServiceDetailsView.FindControl("HFromTimeTextBox")).ClientID %>');
            var txtToTime = $('#<%= ((TextBox)ServiceDetailsView.FindControl("HToTimeTextBox")).ClientID %>');
            var txtNbHours = $('#<%= ((TextBox)ServiceDetailsView.FindControl("NbHoursTextBox")).ClientID %>');
     
            // On abonne la méthode Compute à l'évènement OnChange de chaque TextBox (à chaque fois que OnChange est appelé, on va relancer le calcul)
            if (txtFromTime != null)
                txtFromTime.bind("change", Compute);
            if (txtToTime != null)
                txtToTime.bind("change", Compute);
     
            // Teste si la valeur est un nombre ou non. Si oui on retourne le nombre, si non, on retourne 0
            function IsNumeric(value) {
                return parseInt(!$.isNumeric(value) ? 0 : value);
            };
     
            // Exécute le calcul et affiche le résultat dans txtNbHours
            function Compute() {
                // On récupère les valeurs des TextBox
                var txtFromTimeValue = IsNumeric(txtFromTime.val());
                var txtToTimeValue = IsNumeric(txtToTime.val());
     
                // On additionne
                var result = txtToTimeValue - txtFromTimeValue;
     
                // On affiche le résultat dans la TextBox txtNbHours
                txtNbHours.val(result);
            };
        });
    </script>
    Après il faut blinder ça parce que tu peux avoir des valeurs négatives. Il faut vérifier que txtFromTimeValue soit toujours inférieure à txtToTimeValue, et que ces deux valeurs soient toujours <= 23 et >= 0...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Merci pour votre réponse, je teste tout ça.

    Est-ce qu'il est possible d'appeler une Méthode de page avec le JQuery?

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Oui c'est faisable, il y a pas mal d'exemples sur le net. En voici deux :
    - Using jQuery to Call ASP.NET AJAX Page Methods – By Example
    - Calling ASP.Net WebMethods using jQuery

    Mais dans le cas du DetailsView, je ne vois pas la plus value de le faire, car il y a tout de même un aller/retour qui se fait lorsque tu appelles une WebMethod. Et on ne sait jamais combien de temps peut prendre un aller/retour... En faisant le calcul côté client tu accélères l'affichage et tu ne surcharges pas ton serveur avec de petites opérations de ce genre.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  11. #11
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Merci, c'est parfait

    A bientôt pour une prochaine question

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Calcul des valeurs des TextBox en Visual basic 2010
    Par stracoma dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/09/2014, 21h52
  2. calcul automatique valeur champ input
    Par ekahrd dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/12/2009, 11h16
  3. [VB2005]Calcul de deux valeurs de TextBox
    Par Jiyuu dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/01/2007, 22h55
  4. [VBA-E] Addition des valeurs des textbox
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 49
    Dernier message: 15/02/2006, 14h49
  5. Faire des calculs automatiques en JavaScript
    Par yoyot dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2005, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo