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 :

Problème TextBox dynamiques


Sujet :

ASP.NET

  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut Problème TextBox dynamiques
    Bonjour,

    Je travaille en C# sur une application web en ASP.NET et j'ai un problème avec des textbox générés dynamiquement: je n'arrive pas à en récupérer le contenu.

    Ici la génération des textbox:
    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
     
    foreach (System.Data.DataColumn col in data.Columns)
    {
    [...]
       //Generate field for data values
       #region
       using (var field = new TextBox())
       {
          field.ID = col.ColumnName;
          field.Text = data.Rows[0].ItemArray[a].ToString();
          if (col.ColumnName.Contains("Id"))
             field.Enabled = false;
          value.Controls.Add(field);
       }
       #endregion
    [...]
    }
    Ici le code pour en récupérer la valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach (System.Data.DataColumn col in data.Columns)
    {
       string field = ((TextBox)this.FindControl("MainContent").FindControl(col.ColumnName)).Text;
       sql_query = String.Concat(sql_query, field);
    }
    Et l'erreur générée:
    Object reference not set to an instance of an object.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
    Je suis complètement bloqué, balancez toutes vos idées, je suis ouvert à toute proposition qui me ferait éventuellement progresser...

    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    Je n'ai pas précisé mais c'est dans le cas d'une update:
    - Les champs sont initialement chargés avec le valeur initiale
    - je cherche à récupérer la valeur après modification

  3. #3
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Et si tu y vas en mode débug avec des points d'arrêts tu ne vois pas l'erreur passer ?

    sql_query est bien initialisée ? value.Controls correspond à quoi ?

  4. #4
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Et si tu y vas en mode débug avec des points d'arrêts tu ne vois pas l'erreur passer ?

    sql_query est bien initialisée ? value.Controls correspond à quoi ?
    - sql_query est une string initialisée juste avant le foreach (à la ligne précédente)
    - value est le nom d'une TableCell (les champs sont créés dynamiquement et chargés dans un tableau lui aussi dynamique en fonction du nombre de création de ces champs)

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    L'erreur survient lors de la première itération du foreach, sur l'assignation d'une valeur à "field"

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Ok, dans ce cas c'est assez clair.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    ((TextBox)this.FindControl("MainContent").FindControl(col.ColumnName)).Text

    Il essaye de caster en textbox ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    this.FindControl("MainContent").FindControl(col.ColumnName)

    Sauf que s'il ne trouve rien, difficile de caster, et ça lance une exception.

    Essaye comme ça pour t'assurer que ça vient bien de là :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Textbox tb = this.FindControl("MainContent").FindControl(col.ColumnName); // devrait être null
    string field = tb.Text; // lance l'exception

  7. #7
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    Toujours l'erreur suivante:

    System.NullReferenceException: Object reference not set to an instance of an object. at Database_Web_Administrator.Edit.insert_data() in C:\Users\m.pilard\Documents\Visual Studio 2010\Projects\Database Web Administrator\Database Web Administrator\Edit.aspx.cs:line 267System.NullReferenceException: Object reference not set to an instance of an object. at Database_Web_Administrator.Edit.insert_data() in C:\Users\m.pilard\Documents\Visual Studio 2010\Projects\Database Web Administrator\Database Web Administrator\Edit.aspx.cs:line 267System.NullReferenceException: Object reference not set to an instance of an object. at Database_Web_Administrator.Edit.insert_data() in C:\Users\m.pilard\Documents\Visual Studio 2010\Projects\Database Web Administrator\Database Web Administrator\Edit.aspx.cs:line 267

  8. #8
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    Il ne trouve pas l'objet en effet. Je me doutais bien que mon erreur était ici.
    Une idée de comment faire pour trouver cette tb?

  9. #9
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Tu peux choper un FinControl récursif sur le net, ou essayer en faisant directement
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    this.FindControl(col.ColumnName);

    Je ne connais pas ton squelette ASP, difficile de t'aide d'avantages...

  10. #10
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    C'est ce que j'avais unitiallement essayé et ça ne marche pas non plus. Objet récupéré: null...

    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
     
    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Edit.aspx.cs" Inherits="Database_Web_Administrator.Edit" %>
     
    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    </asp:Content>
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
        <div style="float: left; width: 200px;">
            <div class="vmenu_title"><b>Database list</b></div>
            <div class="vmenu">
                <asp:Table ID="menu_list" runat="server" Width="200px"></asp:Table>
            </div>
        </div>
        <div style="float: right; width: 700px;">
            <div class="content_title"><b><asp:Label ID="lb_content_title" runat="server"></asp:Label></b></div>
            <div class="content">
            <asp:Label ID="lb_content" runat="server"></asp:Label>
            <asp:Label ID="lb_bug_info" runat="server"></asp:Label>
            <br /><center>
                <form id="add_form" method="post" action="add.aspx">
                <asp:Table ID="add_data" runat="server" BorderColor="#465C71" 
                    BorderStyle="Solid" BorderWidth="1px"></asp:Table>
                <br />
                <asp:Button ID="execute" runat="server" Text="Execute" onclick="execute_Click" />
                <asp:Button ID="cancel" runat="server" Text="Cancel" onclick="cancel_Click" />
                </form>
            </center><br />
            </div>
        </div>
    </asp:Content>
    Mon code qui génère les lignes et colonnes du tableau:
    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
     
                //Display data form
                #region
                TableRow title = new TableRow();
                TableCell t1 = new TableCell(); TableCell t2 = new TableCell(); TableCell t3 = new TableCell();
                t1.Text = "Field name"; t2.Text = "Expected data type"; t3.Text = "Data values";
                t1.Width = 150; t1.ForeColor = System.Drawing.Color.WhiteSmoke; t1.HorizontalAlign = HorizontalAlign.Center;
                t2.Width = 150; t2.ForeColor = System.Drawing.Color.WhiteSmoke; t2.HorizontalAlign = HorizontalAlign.Center;
                t3.Width = 150; t3.ForeColor = System.Drawing.Color.WhiteSmoke; t3.HorizontalAlign = HorizontalAlign.Center;
                title.Cells.Add(t1); title.Cells.Add(t2); title.Cells.Add(t3);
                title.BackColor = System.Drawing.Color.FromName("#465C71");
                add_data.Rows.Add(title);
                int a = 0;
                foreach (System.Data.DataColumn col in data.Columns)
                {
                    TableRow r = new TableRow();
                    TableCell name = new TableCell(); TableCell type = new TableCell(); TableCell value = new TableCell();
                    name.Text = col.ColumnName; type.Text = col.DataType.Name;
     
                    //Generate field for data values
                    #region
                    using (var field = new TextBox())
                    {
                        field.ID = col.ColumnName;
                        field.Text = data.Rows[0].ItemArray[a].ToString();
                        if (col.ColumnName.Contains("Id"))
                            field.Enabled = false;
                        value.Controls.Add(field);
                    }
                    #endregion
     
                    name.HorizontalAlign = HorizontalAlign.Center; type.HorizontalAlign = HorizontalAlign.Center; value.HorizontalAlign = HorizontalAlign.Center;
                    r.Cells.Add(name); r.Cells.Add(type); r.Cells.Add(value);
                    add_data.Rows.Add(r);
                    a++;
                }
                #endregion
    Les champs dynamiques sont ajoutés dans la dernière cellule de chaque ligne

  11. #11
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Par défaut
    Problème résolu en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextBox tb = (TextBox)this.Page.FindControl("ctl00").FindControl("MainContent").FindControl(col.ColumnName);
    La raison reste plus ou moins obscure mais bon, ça marche...

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

Discussions similaires

  1. [AC-2010] problème création dynamique de textbox, erreur 429
    Par zorroe dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 05/03/2012, 10h22
  2. [XL-2003] Probléme textbox dynamique
    Par trblolo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/07/2009, 18h39
  3. [VBA-E] UserForm avec textbox "Dynamique"
    Par Alex_Kidd dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2006, 00h29
  4. [C++.NET] problème textBox
    Par stgi02 dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 25/04/2006, 11h38
  5. [vb.net] définir un textbox dynamiquement
    Par arnolem dans le forum Windows Forms
    Réponses: 13
    Dernier message: 05/12/2005, 15h51

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