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 :

optimisation sur datagrid


Sujet :

ASP.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 205
    Points : 206
    Points
    206
    Par défaut optimisation sur datagrid
    Bonjour,

    J'ai remarque que lors de l'utilisation du composant datagird, beaucoup de code source (dont celui sur msdn), lors de leur utilisation avec le mode edition, ont pour habitude de recharger les donnees a partir de la source a chaque fois. Par exemple, dans le morceau de code lie a l'evenement du clic sur le bouton editer, les donnees sont enregistree dans la bdd, et un select* est fait ensuite.

    Je travail avec un xml, mais je ne souhaite pas que mes modifications soit écrites a chaque fois dans le fichier. Pour cela, j'utilise le premier argument de l'événement pour recréer un tableau pour ré-alimenter le datagrid. Du coup, pas besoin de ré-acceder a ma source. Mais avec cette méthode, si je clic pour éditer une ligne, et que je clic sur le bouton éditer d'une autre ligne ensuite, je me rends compte que les données présente sur la première ligne que j'avais voulu éditer ont disparus!

    Tout-en bas, je vais ajouter mon code d'exemple, si quelqu'un veut tester pour voir le problème.

    1)Le fait de vouloir éviter de recharger les données comme je le fais dans le code plus bas est-il une bonne idée?
    2)Est-il possible de résoudre proprement mon problème d'édition?
    3)Si j'ajoute un bouton supplémentaire pour faire la sauvegarde en dessous du datagrid, comment puis-je récupérer les donnees qui se trouvaient dans celui-ci?

    Merci d'avance pour votre aide.
    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
     
    <%@ Page Language="C#" Debug="true" AutoEventWireup="True" %>
    <%@ Import Namespace="System.Data" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html  >
       <script language="C#" runat="server">
     
          ICollection CreateDataSource() 
          {
             DataTable dt = new DataTable();
             DataRow dr;
     
             dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
             dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
             dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
             for (int i = 0; i < 9; i++) 
             {
                dr = dt.NewRow();
     
                dr[0] = i;
                dr[1] = "Item " + i.ToString();
                dr[2] = 1.23 * (i + 1);
     
                dt.Rows.Add(dr);
             }
     
             DataView dv = new DataView(dt);
             return dv;
          }
     
          public void ItemsGrid_OnLoad(Object sender, DataGridCommandEventArgs e)
          {
              lblTest.Text = "load Grid";
              lblTest2.Text = "load Grid";
          }
     
          public void maGrilleEditHandler(Object sender, DataGridCommandEventArgs e)
          {
              DataTable dt = new DataTable();
              DataRow dr;
              dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
              dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
              dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
     
              DataGrid test = (DataGrid)sender;
              ItemsGrid.EditItemIndex = e.Item.ItemIndex;
    /* utilisation de object sender pour recreer mon tableau de donnees plutot
    que de tout recharger \o/ */
              for (int lineNB = 0; lineNB < test.Items.Count; ++lineNB)
              {
     
                  dr = dt.NewRow();
     
                  for (int colNB = 1; colNB < test.Items[lineNB].Cells.Count; ++colNB)
                  {
                      if (test.Items[lineNB].Cells[colNB].Text.Length == 0)
                          dr[colNB - 1] = 0;
                      else
                      dr[colNB - 1] = test.Items[lineNB].Cells[colNB].Text;
                  }
                  dt.Rows.Add(dr);
              }
              ItemsGrid.DataSource = new DataView(dt);
              ItemsGrid.DataBind();
          } 
     
     
          void Page_Load(Object sender, EventArgs e) 
          {
     
              if (!IsPostBack)
              {
                  lblTest.Text = "page_load";
                  // Load this data only once.
                  ItemsGrid.DataSource = CreateDataSource();
                  ItemsGrid.DataBind();
                  lblTest2.Text = "page_load";
              }
          }
     
       </script>
     
    <head id="Head1" runat="server">
        <title>DataGrid Example</title>
    </head>
    <body>
     
       <form id="form1" runat="server">
     
          <h3>DataGrid Example</h3>
    <p><asp:Label ID="lblTest" runat="server" Text="vide"></asp:Label></p>
          <b>Product List</b>
     
          <asp:DataGrid id="ItemsGrid"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               AutoGenerateColumns="true"
               OnEditCommand="maGrilleEditHandler" EditItemStyle-BackColor="#AAAAAA"
               runat="server">
    <EditItemStyle BackColor="#AAAAAA"></EditItemStyle>
               <Columns>  
                  <asp:EditCommandColumn EditText="Editer" ButtonType="PushButton" 
                  UpdateText="Valider" CancelText="Annuler" HeaderText="Actions"/> 
               </Columns> 
     
             <HeaderStyle BackColor="#00aaaa">
             </HeaderStyle> 
     
          </asp:DataGrid>
     
       </form>
       <p><asp:Label ID="lblTest2" runat="server" Text="vide"></asp:Label></p>
     
    </body>
    </html>
    PS: l'exemple ne contient pas de connection a une bdd ou a un xml pour simplifier les tests

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 205
    Points : 206
    Points
    206
    Par défaut
    En fait mon précédent post concerne aspx, et j'ai vu qu'il serait mieux dans le forum c#/asp.net

    Un modérateur pourrait-il le déplacer svp? (et supprimer ce dernier post qui ne servira plus).

    Merci

    PS: si quelqu'un souhaite répondre même... ici

Discussions similaires

  1. [UNIX][Optimisation] sur création de Vue
    Par dyvim dans le forum Oracle
    Réponses: 16
    Dernier message: 30/01/2006, 10h48
  2. [c#] tri sur datagrid
    Par lapartdombre dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/01/2006, 17h32
  3. Ou trouver de la doc sur DataGrid
    Par Terminator dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/10/2005, 19h32
  4. [C#] Evenement Click sur Datagrid
    Par Joad dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 13h37
  5. [VB.NET] Erreur OnMouseUp sur Datagrid
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2005, 10h26

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