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 :

Planning C#.NET (Pas optimisé)


Sujet :

ASP.NET

  1. #1
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut Planning C#.NET (Pas optimisé)
    Bonjour à tous !

    Dans le cadre de mon travail, j'ai pour projet de réaliser un planning des rendez-vous.

    Un planning qui, en théorie, devrait être assez simple vu que c'est par tranche horaire de 1h, et un seul rendez vous par heure, mais proposant 4 zones postales différentes.

    Bon, alors voilà, il y a donc 4 zones qui sont en fait des regroupements de code postaux :
    Exemple : Zone 1 : Paris (7,8,15,16) + 78 (Nord) + 92 (Nord) + 95

    Visuellement mon planing ressemble à l'image "planning.jpg" joint à ce message.


    Alors je suis débutant en ASP.NET, voici comment j'ai procédé :
    1 base de données SQL Server 2005 avec 3 tables (Utilisateur, Secteur, Planning) (voir image : database.jpg)
    1 fonction SQL qui me renvoit le planning de la date reçue en paramètre
    (voir fichier getPlanning.txt)

    Côté ASP.NET : une page de login, puis une page View_Planning.aspx qui m'affiche le planning.

    Celle ci en fait récupère les dates de la semaine, et, dans une boucle for, lance plusieurs fois une fonction qui s'occupe de :
    - Lancer la fonction SQL en indiquant la date reçue en paramètre
    - Créer des Table, TableRow, TableCell et les rajouter à un Panel
    - En même temps que la création, récupérer les évenements que la fonction SQL a récupéré (exemple : Mercredi 6 juin 2007 à 10h dans la Zone 2 : (77) Chelles M. NGUYEN)

    C'est super, chui content, ça marche, ca génère bien mes 6 jours (Lundi à Samedi) en récupérant les données de la base de données !

    Seulement...

    Deux problèmes :
    1/ C'est long... dès que je refresh la page ou arrive sur la page, la génération prend du temps...
    2/ J'aimerai pouvoir faire comme sur Excel à savoir : Quand je clique sur une case, pouvoir modifier, et valider par touche Entrée (dès lors, ca update directement dans la base de données)

    Je suis bloqué depuis 2 jours là... je ne sais pas vraiment comment faire...

    J'ai pensé à tout refaire en datagrid mais je ne suis pas sur que c'est la bonne solution, et surtout je ne suis pas sur de savoir comment faire...

    Voilà donc pourquoi je viens à vous en vous demandant votre avis, votre aide, et écouter vos conseils.

    Je vous remercie beaucoup par avance.

    Merci encore !

    Shinn77


    Edit 11h25 :
    L'idéal serait un résultat comme celui là (côté utilisation) :
    -http://www.dhtmlgoodies.com/scripts/dhtmlgoodies-week-planner/dhtmlgoodies-week-planner.html
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Par défaut
    y a pas moyen de gérer cela avec ajax ?
    Via un UpdatePanel et autre ?

    Fix

  3. #3
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Ben si j'aimerai bien mais bon je sais pas trop comment m'y prendre

    Ajax et updatepanel je men servirai pour la mise à jour et la modification + suppresion (maintenant j sais pas encore comment)

    Pour la génération, je vois pas comment améolioré par contre là... (le problème, c que c lent...)

    Shinn77

  4. #4
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    N'y a t il pas d'autres suggestions ?? svp

    Merci d'avance

    Cordialement

    Shinn

  5. #5
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut
    Salut, pour gérer le double click etc.. il va falloir créer un contrôle personnalisé. J'y réfléchi...J'ai un projet similaire que je viens de commencer.

  6. #6
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Okay j te remercie d'avance

    Shinn77

  7. #7
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut
    Je pense qu'il va falloir créer un contrôle personnalisé via une bibliothèque de classe. Il faudra ensuite gérer les évènnements etc.. via selon la méthode postback ou pourquoi pas utiliser ajax, mais ca s'avère un peu compliquer. Tu peux expliciter un peu plus comment va fonctionner ton planning? manipulation à faire sur celui ci etc..

  8. #8
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Bonjour,

    Merci de ton aide, et désolé de la réponse tardive.

    En ce qui concerne le fonctionnement du planning :

    L'utilisateur se connecte, il accède au planning de la semaine en cours (vue de la semaine en cours).

    Chaque jour peut contenir des evenements par tranche de 1h minimum et maximum. Il s'agit d'un planning de RDV pour commerciaux.

    On a défini 4 zones :
    - Paris (7, 8, 15, 16, 17) + 78 (Nord) + 92 (Nord) + 95
    - Paris (3, 9, 10, 18, 19) + 77 (Nord) + 93 + 95
    - Paris (1, 2, 11, 12, 20) + 78 (Sud) + 91 + 92 (Sud)
    - Paris (4, 5, 6, 13, 14) + 77 (Sud) + 91 + 94

    Ainsi, pour une journée, on a découpé en les evenements par heures et par Zones.


    Maintenant, comment ça marche ou ca devrait marcher plutot :

    Quand l'utilisateur clique sur une tranche (ex 8h - 9h) pour une zone choisie, cela lui propose d'entrée le LIEU et le CLIENT.

    Quand il confirme cela ajoute directe dans la base de données et l'affiche donc coté visuel (.net).

    Pour une tranche/zone déjà renseigné, quand on clique, cela nous propose de modifier les informations deja saisies.

    Une fois confirmé ca met directement à jour.

    On a en plus pour l'affichage de la semaine deux bouton en haut :
    Semaine précédente
    Semaine suivante

    Ceci permettent comme indiqué de visualiser la semaine qui suit ou la semaine précédente. Ces boutons sont deja configurés en AJAX, donc pas de soucis de ce côté.
    ^

    Sinon j'ai pu essayé l'agenda de google qui est vraiment nickel... rapide, simple, beau, c'est un truc du genre que j'aimerai mais par zone et sans l'option d'ajouter des tranches supérieures à 1h (donc plus simple).

    D'autres part, le glisser déposer est vraiment bien pour changer les RDV (selon l'heure, la zone, et même le jour...)

    Voilà,

    Merci d'avance en tout cas.


    Shinn77


    PS : En ce qui concerne la fonction qui génère le tableau de la journée demandait, celle ci exécute en fait une procédures stockée qui elle s'occupe de récuperer les évenement et me genere un tableau que je peux ensuite traiter avec C# .NET :

    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
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
     
    -- =============================================
    -- Author:		Shinn
    -- Create date: 		13/06/2007
    -- Description:		Procédure stockée qui récupère le 
    --			planning du jour
    -- =============================================
    ALTER PROCEDURE [dbo].[getPlanning]
    	-- Add the parameters for the stored procedure here
    	@date datetime
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	-- Zone Minimum
     	DECLARE @ZoneMIN int;
     
    	-- Zone Maximum
    	DECLARE @ZoneMAX int;
     
    	-- Heure
    	DECLARE @Heure int;
     
    	-- Correspond à notre partie dynamique de la requete
    	DECLARE @forSQL varchar(8000);
     
    	-- Correspond à la requete dynamique qui utilisera @forSQL
    	DECLARE @query varchar(8000);
     
    	-- Initialisation des variables
    	SET @ZoneMIN = 1;
    	SET @Heure = 10;
     
    	-- On initialise @forSQL qui est notre variable qui contiendra notre partie de requête dynamique
    	SET @forSQL = '';
     
    	-- On récupère le nombre de Zone et on le met dans la variable @ZoneMAX
    	SELECT @ZoneMAX = count(id) FROM secteur;
     
    	-- On construit notre partie de requête dynamiquement
    	SELECT @forSQL = @forSQL + '''' + s.secteur + ''' [Z' + cast(s.id as char(1)) + '], ' FROM secteur s;
     
    	WHILE (@ZoneMIN <= @ZoneMAX)
    	BEGIN
    		WHILE (@Heure <= 18)
    		BEGIN
    				SET @forSQL = @forSQL + 'max (case (s.id) when ' + cast(@ZoneMIN as nvarchar(2)) + ' then ('+
    											'case (p.heure) when ' + cast(@Heure as nvarchar(2)) + ' then p.lieu + ''/'' + p.client end )'+
    										'end) [Z' + cast(@ZoneMIN as nvarchar(2)) + '_' + cast(@Heure as nvarchar(2)) + '],';				
    				SET @Heure = @Heure + 1;
    		END
    		SET @Heure = 10;		
    		SET @ZoneMIN = @ZoneMIN + 1;
    	END
     
    	-- Supprime la virgule finale
    	SET @forSQL = SUBSTRING(@forSQL, 1, LEN(@forSQL) - 1)
     
    	-- On remplit notre variable @query qui contiendra la requête à exécuter
    	SET @query =	'SELECT ' + @forSQL + '
    					 FROM	Planning p LEFT JOIN Secteur s ON s.id = p.fk_secteur
    					 WHERE	p.date = ''' + cast(@date as nvarchar(20)) + '''';
     
    	-- On exécute la requête
    	EXEC (@query);
    END
    Pour s'en servir... (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXEC getPlanning '2007-06-06'

  9. #9
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Pour tes PB de perfs, quelques questions :

    1- Quel est le code qui génère ton tableau ?
    2- Le ProcStock SQL est exécutée comblient de fois "par tableau" ?

    Sinon, quelques idées pour accélérer :

    1- Met en cache ce qui peut l'être (ce qui ne change pas)
    2- Utilise une couche de persistance et un bouton Mise à jour au lieu de faire un update direct dans la BDD
    3- Optimise tes requêtes SQL (tout ce que fais ta procstock est nécessaire à chaque appel ? peut-être peux-tu la divisée en plusieurs requête et appeler la requête dont tu as besoin au moment où tu en as besoins

  10. #10
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Bonjour,

    merci de ta réponse.

    Concernant la procédure stockée elle me renvoit ma journée complète de10h à 18h selon les 4 zones que j'ai créé (voir plus si j'en crée d'autre).

    Pour la création du tableau graphiquement, c'est le code C# qui s'en occupe.

    En fait j'ai créé une fonction AffWeek qui appelle plusieurs fois une fonction AffJour (6 fois pour 6 jours => Lundi au Samedi).

    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
     
    public void AffWeek()
        {
            DateTime Today = DateTime.Now.AddDays(int.Parse(lblIncrement.Text));
            DateTime First = Today.AddDays(-(int)Today.DayOfWeek + 1);
            DateTime Last = Today.AddDays(7 - (int)Today.DayOfWeek);
     
     
            int Semaine = weekOfDate(Today);
            this.lblSemaine.Text = "Semaine N°" + Semaine + " : <br />";
            this.lblSemaine.Style.Add("font-size", "1.4em");
            this.lblSemaine.Style.Add("font-weight", "bold");
            this.lblSemaine.Style.Add("text-decoration", "underline");
     
            for (int i = 0; i < 5; i++)
            {
                AffJour(First.AddDays(i), false);
            }
            AffJour(First.AddDays(5), true);
        }
    Cette fonction exécutée qu'une seule fois, exécute, comme vous pouvez le voir, plusieurs fois la fonction AffJour :

    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
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
     
     
    void AffJour(DateTime dt, bool isSaturday)
        {
            int HeureFin;
     
            if (isSaturday)
                HeureFin = 15;
            else
                HeureFin = 18;
     
            /* On récupère les paramètres de connexion à la DB à partir du web.config */
            string Connect = System.Configuration.ConfigurationManager.AppSettings["Stps_Planning_DB"].ToString();
     
            /* On crée la command SQL */
            string Command = "EXEC dbo.getPlanning '" + dt.ToShortDateString() + "'";
     
            /* On déclare un objet SqlConnection et on se connecte avec nos paramètres de base de données */
            SqlConnection SqlCnx = new SqlConnection(Connect);
     
            /* On crée un objet SqlCommand */
            SqlCommand SqlCmd = new SqlCommand(Command, SqlCnx);
     
            /* On ouvre la connexion */
            SqlCnx.Open();
     
            /* On crée un objet SqlDataReader qui lit l'ensemble des informations de la commande exécutée */
            SqlDataReader SqlDr = SqlCmd.ExecuteReader();
     
            /* Si une réponse est trouvée */
            try
            {
                while (SqlDr.Read())
                {
                    // define which character is seperating fields
                    char[] splitter = { '/' };
     
                    Table Journee = new Table();
                    Journee.Style.Add("Width", "100%");
                    Journee.Style.Add("background-color", "White");
                    Journee.Style.Add("border", "solid 1px Black");
                    Journee.Style.Add("margin-bottom", "30px");
                    Journee.CellPadding = 0;
                    Journee.CellSpacing = 0;
                    Journee.HorizontalAlign = new HorizontalAlign();
     
                    /* Ligne 1 : titre (Journée) */
                    TableRow row1 = new TableRow();
                    row1.Style.Add("text-align", "center");
                    row1.Style.Add("background-color", "#d1d8d9");
                    row1.Style.Add("font-weight", "bold");
                    row1.Style.Add("height", "30px");
     
                    if (dt.Date == DateTime.Now.Date)
                        row1.Style.Add("color", "#CC0000");
                    else
                        row1.Style.Add("color", "Navy");
     
                    TableCell r1cell1 = new TableCell();
                    r1cell1.ColumnSpan = 9;
                    r1cell1.Text = getDate(dt);
                    r1cell1.Style.Add("border-bottom", "solid 1px Black");
                    row1.Cells.Add(r1cell1);
                    // Ajout de la ligne //
                    Journee.Rows.Add(row1);
     
     
                    /* Ligne 2 : Zone */
                    TableRow row2 = new TableRow();
                    row2.Style.Add("text-align", "center");
                    row2.Style.Add("font-size", "12px");
                    row2.Style.Add("height", "30px");
     
                    // Vide
                    TableCell r2cell1 = new TableCell();
                    r2cell1.Style.Add("background-color", "#d4d0c8");
                    r2cell1.Style.Add("border-right", "solid 1px #aca899");
                    r2cell1.Text = "";
                    r2cell1.Width = 50;
                    row2.Cells.Add(r2cell1);
     
                    // Zone 1
                    TableCell r2cell2 = new TableCell();
                    r2cell2.Style.Add("background-color", "lightblue");
                    r2cell2.Style.Add("border-right", "solid 1px #aca899");
                    r2cell2.Style.Add("border-bottom", "solid 1px #aca899");
                    r2cell2.ColumnSpan = 2;
                    r2cell2.Text = SqlDr["Z1"].ToString();
                    r2cell2.Width = 260;
                    row2.Cells.Add(r2cell2);
     
                    // Zone 2
                    TableCell r2cell3 = new TableCell();
                    r2cell3.Style.Add("background-color", "#fde8a0");
                    r2cell3.Style.Add("border-right", "solid 1px #aca899");
                    r2cell3.Style.Add("border-bottom", "solid 1px #aca899");
                    r2cell3.ColumnSpan = 2;
                    r2cell3.Text = SqlDr["Z2"].ToString();
                    r2cell3.Width = 260;
                    row2.Cells.Add(r2cell3);
     
                    // Zone 3
                    TableCell r2cell4 = new TableCell();
                    r2cell4.Style.Add("background-color", "lightgreen");
                    r2cell4.Style.Add("border-right", "solid 1px #aca899");
                    r2cell4.Style.Add("border-bottom", "solid 1px #aca899");
                    r2cell4.ColumnSpan = 2;
                    r2cell4.Text = SqlDr["Z3"].ToString();
                    r2cell4.Width = 260;
                    row2.Cells.Add(r2cell4);
     
                    // Zone 4
                    TableCell r2cell5 = new TableCell();
                    r2cell5.Style.Add("background-color", "#ebccf7");
                    r2cell5.Style.Add("border-bottom", "solid 1px #aca899");
                    r2cell5.ColumnSpan = 2;
                    r2cell5.Text = SqlDr["Z4"].ToString();
                    row2.Cells.Add(r2cell5);
                    // Ajout de la ligne //
                    Journee.Rows.Add(row2);
     
                    int time = 10;
                    for (int i = 10; i <= HeureFin; i++)
                    {
                        string[] Text;
                        string Ville;
                        string Client;
     
                        /* Ligne 3 : 10h - 11h */
                        TableRow row3 = new TableRow();
                        row3.Style.Add("background-color", "#ffffd5");
                        row3.Style.Add("font", "Calibri");
                        row3.Style.Add("font-size", "11px");
                        row3.Style.Add("font-weight", "bold");
                        row3.Style.Add("height", "30px");
     
     
                        // Heure
                        TableCell r3cell1 = new TableCell();
                        r3cell1.Style.Add("background-color", "#d4d0c8");
                        r3cell1.Style.Add("border-top", "solid 1px #aca899");
                        r3cell1.Style.Add("border-right", "solid 1px #aca899");
                        r3cell1.Style.Add("font-size", "12px");
                        r3cell1.Text = "<a href='?Z=&H=" + time + "'>" + time + "h - " + (time + 1) + "h</a>";
                        r3cell1.Width = 50;
                        row3.Cells.Add(r3cell1);
     
                        // Z1 Lieu + Client
                        TableCell r3cell2 = new TableCell();
                        Text = (SqlDr["Z1_" + time].ToString()).Split(splitter);
                        Ville = Text[0];
                        if (Text.Length == 2)
                            Client = Text[1];
                        else
                            Client = "";
     
                        r3cell2.Text = Ville;
                        r3cell2.Width = 130;
                        r3cell2.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell2.Style.Add("border-right", "dashed 1px #f6dba2");
                        row3.Cells.Add(r3cell2);
                        TableCell r3cell3 = new TableCell();
                        r3cell3.Text = Client;
                        r3cell3.Width = 130;
                        r3cell3.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell3.Style.Add("border-right", "solid 1px #f6dba2");
                        row3.Cells.Add(r3cell3);
     
                        // Z2 Lieu + Client
                        TableCell r3cell4 = new TableCell();
                        Text = (SqlDr["Z2_" + time].ToString()).Split(splitter);
                        Ville = Text[0];
                        if (Text.Length == 2)
                            Client = Text[1];
                        else
                            Client = "";
     
                        r3cell4.Text = Ville;
                        r3cell4.Width = 130;
                        r3cell4.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell4.Style.Add("border-right", "dashed 1px #f6dba2");
                        row3.Cells.Add(r3cell4);
                        TableCell r3cell5 = new TableCell();
                        r3cell5.Text = Client;
                        r3cell5.Width = 130;
                        r3cell5.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell5.Style.Add("border-right", "solid 1px #f6dba2");
                        row3.Cells.Add(r3cell5);
     
                        // Z3 Lieu + Client
                        TableCell r3cell6 = new TableCell();
                        Text = (SqlDr["Z3_" + time].ToString()).Split(splitter);
                        Ville = Text[0];
                        if (Text.Length == 2)
                            Client = Text[1];
                        else
                            Client = "";
     
                        r3cell6.Text = Ville;
                        r3cell6.Width = 130;
                        r3cell6.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell6.Style.Add("border-right", "dashed 1px #f6dba2");
                        row3.Cells.Add(r3cell6);
                        TableCell r3cell7 = new TableCell();
                        r3cell7.Text = Client;
                        r3cell7.Width = 130;
                        r3cell7.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell7.Style.Add("border-right", "solid 1px #f6dba2");
                        row3.Cells.Add(r3cell7);
     
                        // Z4 Lieu + Client
                        TableCell r3cell8 = new TableCell();
                        Text = (SqlDr["Z4_" + time].ToString()).Split(splitter);
                        Ville = Text[0];
                        if (Text.Length == 2)
                            Client = Text[1];
                        else
                            Client = "";
     
                        r3cell8.Text = Ville;
                        r3cell8.Width = 130;
                        r3cell8.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell8.Style.Add("border-right", "dashed 1px #f6dba2");
                        row3.Cells.Add(r3cell8);
                        TableCell r3cell9 = new TableCell();
                        r3cell9.Text = Client;
                        r3cell9.Width = 130;
                        r3cell9.Style.Add("border-bottom", "solid 1px #f6dba2");
                        r3cell9.Style.Add("border-right", "solid 1px #f6dba2");
                        row3.Cells.Add(r3cell9);
     
                        Journee.Rows.Add(row3);
                        time++;
                    }
                    Panel1.Controls.Add(Journee);
                }
            }
            /* Sinon */
            catch
            {
     
            }
            /* Que cela a réussi ou non */
            finally
            {
                /* On ferme le reader */
                SqlDr.Close();
     
                /* On ferme la connexion */
                SqlCnx.Close();
            }
        }
    En gros pour AffJour, je lui donne comme parametre, la date + un boolean pour préciser s'il s'agit du samedi car samedi les horaires sont de 10h à 16h seulement au lieu de 18h habituelle.

    Cette fonction exécute ma procédure stockées en lui renseignant le paramètre qu'elle l'a reçu (la date).

    Ma procédure stockée s'exécute et me renvoie les données.

    La fonction traite alors dans une boucle les informations et commence à créer le tableau (TableRow, TableCell...), et pour les case des heures dans les zones elle rempli les informations reçues par la procédure (soit le lieu et client, soit vide si rien).

    A la fin, mon tableau est ajouté au panel et est donc affiché.

    Ma fonction AffWeek exécute alors encore une fois la fonction AffDay en lui définissant le prochain jour en param etc.

    Voilà comment fonctionne exactement mon application.

    Donc pour répondre à ta 2e question, ma procédure est exécuté 1 seule fois par tableau, mais la page genère 6 tableau (Lundi à Samedi) donc la procédure dans une même page est exécuté 6 fois.

    Pour le reste de tes idées, merci ^^
    Pour le moment je ne sais pas vraiment comment les traiter...


    Merci en tout cas beaucoup, ca m'aide pas mal.

    Shinn77

  11. #11
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    J'ai survolé ton code. Voici quelques remarques :

    - Tu pourrais réutiliser la même connexion SQL au lieu d'en recréer une à chaque passage dans affJour()
    - Tu ouvre un DataReader que tu laisses ouvert longtemps, le temps de créer tes tableaux

    Tu devrais essayé de séparer la récupération des données de la BDD et la création de l'IHM, en faisant transiter les infos de l'un à l'autre avec par exemple des DataSet. Ca te permettra de ne pas garder une connexion ouverte vers ta BDD trop longtemps.

    Tu devrais optimiser la création de tes tableaux en réutilisant les objets déjà instanciés au lieu d'en créer de nouveaux à chaque fois.

    Tu peux alléger les pages HTML générées en utilisant des feuilles de style CSS

    Tu peux utiliser un UserControl pour centraliser l'IHM d'un tableau

    Enfin, peut-être travailler sur ta procédure stockée voir comment l'optimiser

  12. #12
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Merci Guitoux, je prend note de tout ca afin d'optimiser au mieux, et améliorer la rapidité de traitement de l'application.

    En parlant de ça justement, j'ai copié mon repertoire Planning (C# .NET) vers le serveur de mon entreprise. Après l'envoi complet, j'ai lancé l'application via mon navigateur (le serveur tourne avec IIS), et là à la grande surprise :
    le chargement est super rapide !!

    A savoir :
    - le chargement de la page est rapide,
    - quand je clique sur "Semaine suivante" ou "Semaine précédente" ca se fait pratiquement en instantané, j'ai même parfois même le temps de voir afficher le chargement AJAX.

    M'enfin cependant, j vais en profiter pour tout de même mieux optimiser le code avec tes suggestions,

    Merci,

    Shinn77

Discussions similaires

  1. Comment réaliser Planning asp.net + ajax .
    Par lolymeupy dans le forum ASP.NET
    Réponses: 5
    Dernier message: 03/02/2010, 09h32
  2. Plan d'exécution pas logique
    Par pat29 dans le forum Administration
    Réponses: 6
    Dernier message: 07/03/2008, 14h37
  3. Fichier trop lourd car pas optimisé
    Par mimic44 dans le forum Excel
    Réponses: 6
    Dernier message: 18/04/2007, 12h12
  4. [VB.NET] Pas moyen dafficher un integer
    Par guillaume1998 dans le forum VB.NET
    Réponses: 11
    Dernier message: 11/11/2005, 16h17
  5. [SQL*Net] pas de listener : TNS-12547
    Par aline dans le forum Oracle
    Réponses: 2
    Dernier message: 30/05/2005, 11h05

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