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 :

[C#] New DataRow à partir d'un formulaire


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [C#] New DataRow à partir d'un formulaire
    Bonjour!

    Voilà en 2-3 lignes mon problème:
    Je souhaite créer une fonction permettant, à l'aide d'un formulaire, d'ajouter une ligne ou tuple à ma DataTable préalablement créée par une autre fonction.

    Pour la première insertion tout fonctionne bien, mais lors de la deuxième tentative, je remarque que me fonction écrase la première entrée plutôt que de rajouter une nouvelle ligne... sniff. Je suis un peu paumé... Faut dire que je n'ai quasi aucune expérience de prog, ce qui n'aide pas!

    Voici mes fonction:

    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
    protected void Page_Load(Object Src, EventArgs e)
    {
       //quelques trucs sans grande importance...
       CreateTabel();
     
    }
     
     
    private void CreateTable()
    {
           DataTable dt = new DataTable("trans");
     
           DataRowCollection rcd = dt.Rows;
     
           DataRow[] dr;
     
           dt.Columns.Add(new DataColumn("MSG_TYPE", typeof(string)));
           dt.Columns.Add(new DataColumn("MAINKEY", typeof(string)));
           dt.Columns.Add(new DataColumn("SUBKEY", typeof(string)));
           dt.Columns.Add(new DataColumn("DESCRIPTION", typeof(string)));
           dt.Columns.Add(new DataColumn("RELEASE_MIN", typeof(string)));
           dt.Columns.Add(new DataColumn("OWNER", typeof(string)));
           dt.Columns.Add(new DataColumn("LANGUAGE", typeof(string)));
     
     
           DataColumn[] keys = new DataColumn[1];
           keys[0] = dt.Columns[0];
     
           dt.PrimaryKey = keys;
     
           myDataSet = new DataSet();
     
           myDataSet.Tables.Add(dt);
     
           DataView dm = new DataView(dt);
     
           DatsGrid.DataSource= dm;
           DatsGrid.DataBind();
     
    }
     
    private void FillData(Object sender, EventArgs e)
    { 
          DataTable t;
          t = myDataSet.Tables["trans"];
     
          DataRow dr = t.NewRow();
     
          dr[0] = msgtypedrop.SelectedItem.Text;
          dr[1] = mainkey.Value;
          dr[2] = subkey.Value;
          dr[3] = description.Value;
          dr[4] = releasemin.Value;
          dr[5] = ownertest.SelectedItem.Text;
          dr[6] = language.Value;
     
          t.Rows.Add(dr);
     
          DatsGrid.DataSource= t;
          DatsGrid.DataBind();
     
      }
    // Mon bouton Asp de mon formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:button text="Insert" OnClick="FillData" runat="server"/>
    Merci infiniment pour votre aide et toute bonne journée

    [Tags [ASPX][C#] ajoutés par freegreg]
    [Balises
    [Code] ajoutées]
    [Pensez-y, vous-même, la prochaine fois. Merci et bienvenue ]

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    je ne suis pas sur de moi mais je pense que tu devrais preciser la ligne a laquel tu insere
    en fait tu dois choper le nombre de lignes deja presente et insere a le ligne +1

    non autant pour moi ca na rien a voir

    dsl

    Alexis
    ceux qui ne s'amusent pas ne sont pas des gens sérieux!! MSDN français

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Là est tout le problème. Mais connais-tu une méthode pour évaluer le nombre de lignes déjà présentes? Mais, ce que je ne comprend pas, c'est que NewRow() est prévu à cet effet, ou alors, ce qui est bien possible, j'ai pas bien compris son utilité. MyTable.Add(dr) rajoute la ligne dans la table MyTable. Suis un peu perdu, faut l'avouer...

    Je continue de chercher. Merci pour l'idée en tout cas.. c bien cool.

  4. #4
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Après survol rapide (trop?) de ton code,
    cela doit être un pb de PostBack.

    essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void Page_Load(Object Src, EventArgs e) 
    {     
       if (!IsPostBack) 
       {
         //quelques trucs sans grande importance... 
         CreateTable();  
       }
    }
    C'est un pb qui revient fréquemment (trop? ), fais une recherche avancée!
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  5. #5
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 113
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par freegreg
    Après survol rapide (trop?) de ton code,
    cela doit être un pb de PostBack.

    essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void Page_Load(Object Src, EventArgs e) 
    {     
       if (!IsPostBack) 
       {
         //quelques trucs sans grande importance... 
         CreateTable();  
       }
    }
    C'est un pb qui revient fréquemment (trop? ), fais une recherche avancée!
    +1.
    En effet, quand tu cliques sur ton bouton, ton code d'ajout d'une ligne est bien appelé mais il envoie également un PostBack à la page qui récrée ton dataset à vide via la fonction CreateTable...

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Après avoir procédé aux modifs (thanks guys...), voilà l'erreur que j'obtiens si je place la fonction CreateTable() dans if(!IsPostBack)!: System.NullReferenceException.... Ce qui doit vouloir dire que ma fonction s'attend à recevoir une valeur ou un truc du genre...

    Any idea?

    Merci bcp pour votre aide

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai maintenant essayé de créer une première ligne vide par défaut (pas vraiment sûr de l'utilité ), ce qui a eu pour effet de déplacer le prob de la référence NULL à la fonction FillData(...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataTable t;
    t = myDataSet2.Tables["trans"];
    tu n'as alors plus aucune référence (Même prob...).

    Merci

    [Balise [Code] ajoutée par freegreg]
    [Pensez-y, vous-même, la prochaine fois. Merci ]

  8. #8
    Membre régulier Avatar de chman
    Inscrit en
    Novembre 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 94
    Points : 97
    Points
    97
    Par défaut
    myDataSet2 est-il instancié ?

    "trans" existe-t-elle parmi les tables ?

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En fait myDataSet (et non pas myDataSet2...me suis trompé) est déclaré pour la première fois dans la fonction CreateTable(). J'y assigne la Table 'trans' que j'ai également créé dans cette même fonction. Par contre je ne peux pas te dire si il est instancié, puisque je ne sais pas ce que ça veut dire. (Sorry, je la joue 100% freestyle... n'ayant pas de background en prog.)

    Merci.

    J'ai essayé de déclarer ma table et mon dataset dans ma page_load, mais le prob reste le même. Je continue de tripatouiller...

  10. #10
    Membre régulier Avatar de chman
    Inscrit en
    Novembre 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 94
    Points : 97
    Points
    97
    Par défaut
    je crois comprendre,

    en aspx, les variables que tu déclares dans ta page ne converse pas leur valeur entre 2 rechargements

    donc :

    lors du premier chargement, il execute createTable où il instancie (crée un nouvel objet) myDataSet

    lors du clic, il fait un nouvel appel sur la page, mais myDataSet n'est plus instancié (= null), d'où l'erreur

    donc tu devras passé soit par une variable de session ou le viewstate

  11. #11
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut


    Trop cool! Ca marche! Merci infiniment!!! Voici les modifs que j'ai apporté:

    Dans la fct CreateTable(), après avoir défini et attribué MyTable, j'ai créé la variable de session suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Session["datas"] = myDataSet;
    Il ne me restait plus ensuite qu'à appeler cette variable de session dans ma fct FillData(...) de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataTable t;
    DataSet tt = (DataSet)(Session["datas"]);
    t = tt.Tables["trans"];
    Et ainsi tout fonctionne à merveille!!! reste plus qu'à définir un message d'erreur (contrainte clé primaire).

    Merci viel mal pour ton aide!!!!

    Salutations de l'Allemagne

    [Balises [Code] ajoutées par freegreg]
    [Pensez-y, vous-même, la prochaine fois. Merci ]

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

Discussions similaires

  1. Executer une application a partir d'un formulaire
    Par ibticeme dans le forum IHM
    Réponses: 36
    Dernier message: 26/10/2006, 22h16
  2. Réponses: 27
    Dernier message: 16/09/2005, 17h40
  3. gestion de fichier à partir d'un formulaire
    Par seb59dk dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 16h52
  4. Réponses: 2
    Dernier message: 15/06/2005, 17h32
  5. Réponses: 6
    Dernier message: 12/10/2004, 19h12

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