Table et controles sever dynamique

Signaler
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
bonjour,
j'ai un probleme, en fait je génére un tableau dhtml dynamique et je le rempli de controle (dropdownlist label, inputext ...) cependant chaque fois que je clique sur un bouton valider et que je veuiller récupéré les element rempli par l'utilisateur je n'y arrive pas. On dirai qu'avant d'execter le code qui est dans le bouton la page enleve tout les controles et les lignes ajouter dynamiquement ainsi si je recherche les contrles par rapport à leur id oubien que je passe le tableau généré a une autre page et que je cherche les elements ajoutés je ne trouve rien il y'a et il genére une erreur:
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
voici mon code:using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace gestion_commerciale
{
/// <summary>
/// Description résumée de [!output SAFE_CLASS_NAME].
/// </summary>
public class bon : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label xnumbon;
protected System.Web.UI.WebControls.Label xcompte;
protected System.Web.UI.WebControls.Label xdate;
protected System.Web.UI.WebControls.Label xcode;

public HtmlTable xtable
{
get
{
return Table1;
}
}
private void Page_Load(object sender, System.EventArgs e)
{
this.EnableViewState=true;
Table1.EnableViewState=true;
if (!IsPostBack )
{
Table1.EnableViewState=true;
string sql_cl= "SELECT nom_client FROM client order by nom_client asc";
NumBon numero_bon = new NumBon();
xnumbon.Text = numero_bon.getNumBon().ToString();
xcompte.Text= Session["compte"].ToString();
DataBase db= new DataBase();
db.setDbConnection();
db.getDbConnection().Open();
RecordSet rs = new RecordSet(sql_cl,db.getDbConnection());
xclient.DataSource = rs.execSelect();
xclient.DataTextField = "nom_client";
xclient.DataBind();

}

}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
/*HtmlInputText ddl =(HtmlInputText)this.Table1.FindControl(0+"lc"+1);
TextBox1.Text=ddl.Value;*/

//TextBox1.Text=ddl.s

//TextBox1.Text=ddl.SelectedItem.Text;
//Session.Add("tableau",Table1);
Server.Transfer("temp.aspx");

}

private void Button2_Click(object sender, System.EventArgs e)
{

int numrows = Convert.ToInt32 (xnbre.Text);
// boucle selon le nombre de produit
for ( int r = 0; r < numrows; r++ )
{
// instantiate a new row
HtmlTableRow row = new HtmlTableRow ( );
row.EnableViewState=true;

// set bgcolor for alternating rowsif ( r % 2 1 ) row.BgColor "beige";

// loop through the given number of cells
for ( int c = 0; c < 8; c++ )
{
// instantiate a new cell
HtmlTableCell cell = new HtmlTableCell ( );
cell.EnableViewState=true;
// add cell content
if(c==0)
{
string sql_query="select distinct(nom_prod) from produit order by nom_prod asc";
DropDownList ddlDesi = new DropDownList();
//ddlDesi.EnableViewState=false;
//ddlDesi.AutoPostBack=true;
ddlDesi.ID=r+"lc"+c;
//DropDownList ddlDesi = (DropDownList)this.FindControl("l0c0");
DataBase db= new DataBase();
db.setDbConnection();
db.getDbConnection().Open();
RecordSet rs = new RecordSet(sql_query,db.getDbConnection());
ddlDesi.DataSource = rs.execSelect();
ddlDesi.DataTextField = "nom_prod";
ddlDesi.DataBind();
cell.Controls.Add (ddlDesi);
}
else if(c==1)
{
HtmlInputText itnom=new HtmlInputText();
itnom.ID=r+"lc"+c;
itnom.Size=10;
cell.Controls.Add(itnom);
}
else if (c==2)
{
DropDownList ddl = new DropDownList();
ddl.ID=r+"lc"+c;
ddl.Width=100;
//creation d'un array liste
ArrayList heuredifusion=new ArrayList ( );
heuredifusion.Add ( "12h:30" );
heuredifusion.Add ( "13h:00" );
heuredifusion.Add ( "14h:00" );
heuredifusion.Add ( "14h:15" );
heuredifusion.Add ( "15h:00" );
heuredifusion.Add ( "17h:00" );
heuredifusion.Add ( "19h:30" );
heuredifusion.Add ( "20h:00" );
heuredifusion.Add ( "20h:30" );
heuredifusion.Add ( "21h:00" );
heuredifusion.Add ( "23h:30" );
heuredifusion.Add ( "23h:45" );
ddl.DataSource=heuredifusion;// fn array liste
ddl.DataBind();
cell.Controls.Add (ddl);

}
else if(c==3)
{
HtmlInputText itqte=new HtmlInputText();
itqte.ID=r+"lc"+c;
itqte.Size=2;

cell.Controls.Add(itqte);
}
else if(c==4)
{

DropDownList stationDifusion = new DropDownList();
stationDifusion.ID=r+"lc"+c;
stationDifusion.Width=100;
//creation d'un array liste
ArrayList station=new ArrayList( );
station.Add("Télévision");
station.Add("Radio RSI");
station.Add("Chaîne Nationale");
station.Add("Dakar FM" );
station.Add("St Louis FM");
station.Add("Louga FM");
station.Add("Thies FM");
station.Add("Kaolack FM");
station.Add("Diourbel FM");
station.Add("Kolda FM");
station.Add("Ziguinchor FM");
station.Add("Tamba FM");
station.Add("Fatick FM");
station.Add("Synchronisation");
stationDifusion.DataSource=station;// fin array liste
stationDifusion.DataBind();
cell.Controls.Add (stationDifusion);
}

else if (c==5)
{
DropDownList ddl = new DropDownList();
DropDownList ddlHeureDifusion = new DropDownList();
ddl.ID=r+"lc"+c;
ddlHeureDifusion.Width=100;
//creation d'un array liste
ArrayList majoration=new ArrayList ( );
majoration.Add ( "0" );
majoration.Add ( "5" );
majoration.Add ( "10" );
majoration.Add ( "15" );
majoration.Add ( "20" );
majoration.Add ( "25" );
majoration.Add ( "30" );
majoration.Add ( "35" );
majoration.Add ("40" );
majoration.Add ( "45" );
majoration.Add ( "50" );
majoration.Add ( "55" );
majoration.Add ( "60" );
majoration.Add ( "65" );
majoration.Add ( "70" );
majoration.Add ( "75" );
majoration.Add ( "80" );
majoration.Add ( "85" );
majoration.Add ( "90" );
majoration.Add ( "95" );
majoration.Add ( "100" );
ddl.DataSource = majoration;// fin array liste
ddl.DataBind();
cell.Controls.Add (ddl);
}

// add the cell to the Cells collection
row.Cells.Add ( cell );
}
// add the row to the Rows collection
Table1.Rows.Add(row);

}
}

}
}

SOS aider mo s'il vous plait je suis dans la ...

22 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
j'ai pas lu toute ta source mais le probleme semble etre que tu crées tes controls puis tu fais le postback, et la tout tes controls disparaissent ?

je viens de faire une petite source, qui normalement t'aidera à resoudre ton problème.


<%@ Page Language="VB"  Trace="true"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">

    Public Class ControlColl
        Inherits CollectionBase
        
        Public Function Add(ByVal [Control] As Control) As Control
            Me.List.Add([Control])
            Return [Control]
        End Function
        
        Default ReadOnly Property Item(ByVal index As Int32) As Control
            Get
                Return CType(Me.List.Item(index), Control)
            End Get
        End Property
        
    End Class
    
    Public Property CollectionOfControl() As ControlColl
        Get
            Return CType(Session("CollectionOfControl"), ControlColl)
        End Get
        Set(ByVal value As ControlColl)
            Session("CollectionOfControl") = value
        End Set
    End Property
        

    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        
        If Not Page.IsPostBack Then
            CollectionOfControl = New ControlColl
        Else
            For Each c As Control In CollectionOfControl
                ph1.Controls.Add(c)
            Next
        End If
        
    End Sub
    

    Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
               
        Dim txt As New TextBox
        txt.Text = "Cyril"
        txt.ID = "Txt1"
        ph1.Controls.Add(txt)
        CollectionOfControl.Add(txt)
       
    End Sub
    
    Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        button2.Text = "button cliqué" 
    End Sub
    
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>

    <form id="form1" runat="server">
    

    
    
        
        
        
    

    </form>

</html>



Essaye de la comprendre, si tu comprend pas tout dis le moi, je t'expliquerais mais tu vois que qd tu cliques sur le bouton 2 le premier bouton est gardé.

pour pouvoir recuperer la valeur du textbox, j'ai pas ecrit le code mais je te l'explique.

il faut tout simple boucler sur CollectionOfControl, en gros ca va te donner ca

for each c as control in CollectionOfControl
if c.ID = "txt" then
'c'est mon bon textbox
dim txtbox as textbox = ctype(c, textbox)
txtbox.text = "Texte changé"
end if
next

tu peux faire ca car CollectionOfControl est un tableau de control, et donc il possede l'attribut ID

J'espere que ca repondra à ton problème

@+

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

Salut,
Merci beaucoup cyril de m'avoir répondu.
depuis lor je suis sur le code. En fait je travail sous c#. Bon d'aprés ce que j'ai compris vous creer une collection de de controls et que chaque fois que vous ajouté un controle sur la page vous l'ajouté dans le controle de collection et pour le retrouver vous parcourez la collection en recherchant parr ID. Mon Probleme c que je n'arrive pas a mettre cela en c#. S'il vous plait aider moi depuis plus de deux semaine je bloc sur sa je n'avance pas.
merci d'avance
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
dis moi ou tu n'arrives pas à traduire, ou si tu as deja tout traduit, montre moi ce que t'as fait.

J'ai plus trop le temps ces temps, donc je peux pas te traduire toute la source en C#

mais j'en ai pas pour trop longtemps, avec de la chance peut etre ce soir, mais donne moi ce que t'as pas traduit, je trouverais peut etre deux minutes :)

sinon pour le principe de ma source, oui tu as bien compris

@+

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

merci pour tout;
en fait dans des accesseur au niveau de vb.net il y un arguement index que je n'est pas compris et qu'au niveau de c# il me dit que cela na pas ete definit null par c vrai je pense qu'au niveau de c# les accesseur non pas d'argument merci beaucoup de regarder le code pour moi tu est genial:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace datagrid
{

public class WebForm3 : System.Web.UI.Page
{
public System.Web.UI.WebControls.Button Button1;
public System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.PlaceHolder ph1;

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Page_Init(object sender, System.EventArgs e)
{
InitializeComponent();
}
public class ControlColl : CollectionBase
{
public int index
{
get
{
return index;
}
set
{
index=value;
}
}

public Control Add(Control lControl)
{
this.List.Add(lControl);
return lControl;
}

Control Item
{
get
{
return ((Control)this.List[index]);
}
}
}

public ControlColl CollectionOfControl
{
get
{
return ((ControlColl)Session["CollectionOfControl"]);
}
set
{
Session["CollectionOfControl"] = value;
}
}

public void Button1_Click(object sender, System.EventArgs e)
{
TextBox txt = new TextBox();
txt.Text = "Cyril";
txt.ID = "Txt1";
ph1.Controls.Add(txt);
CollectionOfControl.Add(txt);
}

public void Button2_Click(object sender, System.EventArgs e)
{
Button2.Text = "button cliqué";
}

private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
CollectionOfControl = new ControlColl();
}
else
{

foreach (Control c in CollectionOfControl)
{
ph1.Controls.Add(c);
}
}
}
}
}
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
J'ai tj pas le temps :

voici comment fonctionne les propriétés en C# et l'equivalent en VB

        public int myVar;

public int MyProperty
{
get { return myVar;}
set { myVar = value;}
}

        Public myVar As Integer
        
        Public Property MyProperty() As Integer
            Get
                Return myVar
            End Get
            Set(ByVal value As Integer)
                myVar = value
            End Set
        End Property



j'espere que ca peut t'aider

@+

Ce soir j'aurais plus le temps.

Par contre tu peux me detailler la ligne ou ca bug.

et une petite astuce qd tu ecris des longs codes dans le forum. entoure le des balises [co_de] /co_de (sans le _ au milieu)

@+

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

merci pour tout
en fait dans le code que vous m'avez remis il y'a ce passage
 Default ReadOnly Property Item(ByVal index As Int32) As Control
            Get
                Return CType(Me.List.Item(index), Control)
            End Get
        End Property

que moi j'ai traduit au debut comme sa en c#
Control Item
{
  get { 
       return ((Control)this.List[index]); 
   }
} 

donc naturellement il me dit qu'il ne connait pas index
alors moi j'ai ajouté ceci
public int index
{
  get
      {
        return index;
      }
   set{
          index=value;
   }
}

mais le problem reste entier je ne sait pas à quel moment initiallise index
et à l'execution dès que je click sur le boutton1 il me genere deux input avec le meme id donc quand je clique sur le deuxieme boutton il se plante en me disant qu'il y'a plusieur control qui ont le meme id.
et meme quand je met trace=true au niveau de la page aspx le l'erreur survient plus tot lor du click du premier boutton il me dit que trace doit avoir de control dont les id sont distinc se qui confirme ce que j'ai dit plus haut.
je suis sur que le probleme provient de ce index
je surveille le mail tt le temps en attendant votre reponse la monsieur si sa marche vous m'aurait tirer d'un mauvais pas
merci d'avance
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
J'ai qq secondes : voici

public Control Item(Int32 index)
{
return (Control)Me.List.Item(index);
}

C bon ?

@+

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

salut,
j'avait deja essayé cela mais sa ne marche pas. Je ne comprend pas pourquoi. Et le question fondamental c'est qui est ce qui appel cette methode dans tt le programme.
merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
on s'embete pour item mais c'est vrai qu'elle ne sert à rien, je l'ai mis par habitude ;)
donc si tu veux tu peux l'enlever, en théorie ca devrait marcher, si un jour j'arrive à trouver du temps je te traduis ca :)
Par contre c'est qd meme bizarre que ca marche pas :-/

@+

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

salut

Merci pour tout se que vous avait fait.

Vous avez raison le fait d'enlever cette methode n'a aucune influence visible sur prog. mais ce qui est bizard c'est pourquoi le programme me genere deux input alors que lors du click on a instancié qu'un seul textbox.
Je sais que le temps vous manque mais Je t'en pris je bloc depuis des semaines si tu peu encore regarder le code
encore merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
comment ca il te genere deux input ?

avec mon code version C# il te fait deux input ? ou alors avec ton code ?

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

Avec le code en vb sa marche.
mais avec le code que j'ai traduit il me donne deux input c'est se qui empeche le code de fonctionner car il retrouve deux imput qui ont le meme ID. si tu veu je te redone le code que j'ai:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace datagrid
{

public class WebForm3 : System.Web.UI.Page 
{
public System.Web.UI.WebControls.Button Button1;
public System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.PlaceHolder ph1; 

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{    
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Page_Init(object sender, System.EventArgs e) 
{ 
InitializeComponent(); 
} 
public class ControlColl : CollectionBase 
{  

public Control  Add(Control lControl) 
{ 
this.List.Add(lControl); 
return lControl; 
} 

} 

public ControlColl CollectionOfControl 
{ 
get 
{ 
return ((ControlColl)Session["CollectionOfControl"]); 
} 
set 
{ 
Session["CollectionOfControl"] = value; 
} 
} 

public void Button1_Click(object sender, System.EventArgs e) 
{
TextBox txt = new TextBox(); 
txt.Text = "Cyril"; 
txt.ID = "txt1"; 
ph1.Controls.Add(txt); 
CollectionOfControl.Add(txt); 
} 

public void Button2_Click(object sender, System.EventArgs e) 
{ 
Button2.Text = "button cliqué"; 
} 

private void Page_Load(object sender, System.EventArgs e) 
{ 
if (!Page.IsPostBack) 
{ 
CollectionOfControl = new ControlColl(); 
} 
else 
{ 
 
foreach (Control c in CollectionOfControl) 
{ 
ph1.Controls.Add(c); 
} 
} 
} 
}
}
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
J'ai compris le problème. c'est quand tu cliques sur le bouton 1 fois ca t'affiche le textbox une deuxieme fois encore un autre, une troisieme fois ca plante.

Je te modifie le code pour que qd tu cliques ca te rajoutes un bouton different avec un autre ID

si tu veux pas en creer un autre, tu n'as qu'a verifier si il existe deja ou pas (demande moi si tu comprend pas)

Je vais vite fait modifier la source et je te montre ca

@+

Cyril
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    
    public class ControlColl : CollectionBase
    {

        public Control Add(Control lControl)
        {
            this.List.Add(lControl);
            return lControl;
        }

    }
    
    public ControlColl CollectionOfControl
    {
        get
        {
            return ((ControlColl)Session["CollectionOfControl"]);
        }
        set
        {
            Session["CollectionOfControl"] = value;
        }
    }

    public Int32 IDCount
    {
        get
        {
            return ((Int32)Session["IDCount"]);
        }
        set
        {
            Session["IDCount"] = value;
        }
    }

    public void Button1_Click(object sender, System.EventArgs e)
    {
        TextBox txt = new TextBox();
        txt.Text = "Cyril";
        txt.ID = "txt" + @IDCount;
        ph1.Controls.Add(txt);
        CollectionOfControl.Add(txt);
        IDCount ++;
    }

    public void Button2_Click(object sender, System.EventArgs e)
    {
        Button2.Text = "button cliqué";
    }

    private void Page_Load(object sender, System.EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            CollectionOfControl = new ControlColl();
            IDCount = 0;
        }
        else
        {
            foreach (Control c in CollectionOfControl)
            {
                ph1.Controls.Add(c);
            }
        }
    } 
    
//    Public Property CollectionOfControl() As ControlColl
//        Get
//            Return CType(Session("CollectionOfControl"), ControlColl)
//        End Get
//        Set(ByVal value As ControlColl)
//            Session("CollectionOfControl") = value
//        End Set
//    End Property
//        
//
//    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
//        
//        If Not Page.IsPostBack Then
//            CollectionOfControl = New ControlColl
//        Else
//            For Each c As Control In CollectionOfControl
//                ph1.Controls.Add(c)
//            Next
//        End If
//        
//    End Sub
//    
//
//    Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
//               
//        Dim txt As New TextBox
//        txt.Text = "Cyril"
//        txt.ID = "Txt1"
//        ph1.Controls.Add(txt)
//        CollectionOfControl.Add(txt)
//       
//    End Sub
//    
//    Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
//        button2.Text = "button cliqué" 
//    End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>

    <form id="form1" runat="server">
        

            
            
            
        

    </form>

</html>



Je fais pas de code behind car je travaille avec WebDev donc asp.net 2 et C#2 pour apprendre à m'en servir, mais il n'y a rien de spécifique à .net 2.0 la bas.

Je t'ai remis tout le code mais j'ai fait qu'une simple petite modif, (et aussi mangé :D)

@+

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

la sa marche ,
Mais coté comprehension je suis totalement largué. Je n'arrive pas à comprendre pourquoi il genere les deux imput du coté c# et que du coté de vb il ne le fait pas. Je croyais que l'informatique n'etait pas une science aleatoire :) .
Si vous pouvez eclairé ma lanterne.
Et encore merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
J'ai modifie le code, entre la source VB et la source C# que tu avais traduit le comportement etait identique.

ca buggait car la premiere fois que tu cliquais sur le bouton, tu ajoutais l'id "txt" la deuxieme fois on fait le postback on regarde les controles qu'il y a, il n'y en a qu'un et l'affiche, apres on passe à la procedure du click, et l'on rajoute un controle avec le meme id la on se retrouve avec deux controls sur la page, mais ayant la meme ID, qd l'on clique sur un bouton, il va boucler sur les controls et la ca va planter car il y aura deux controles identiques.

ce que j'ai changé, c'est ca (Je viens de m'apercevoir que j'ai laissé le VB en comment)

public Int32 IDCount
{
get
{
return ((Int32)Session["IDCount"]);
}
set
{
Session["IDCount"] = value;
}
}

public void Button1_Click(object sender, System.EventArgs e)
{
TextBox txt = new TextBox();
txt.Text = "Cyril";
txt.ID = "txt" + @IDCount;
ph1.Controls.Add(txt);
CollectionOfControl.Add(txt);
IDCount ++;
}

j'ai ajouté un compteur qu'on ajoute dans le viewstate, et qd on clique sur un bouton, on incremente ce compteur (IDCount ++;) comme ca l'ID et a chaque different et il y a plus d'erreur.

J'espere avoir éclairé un peu ta lanterne. :)
Si tu comprend pas, redis le moi, et montre moi le(s) passage(s) que tu comprend pas, j'essaierais de t'expliquer.

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

Salut,
En fait le comportement entre le Vb et c# ne sont pas pareille je m'explique:
VB: Sa ce passe comme tu as dit en haut. On crée une premiere fois un imput ensuite on passe au posback et ensuite on crée un deuxieme imput par l'intermedaire du boutton qui le meme ID le prog plante la je suis daccord
c#:
on affiche la page on click sur le premier boutton il affiche du cout deux input on click sue le deuxieme boutton il se plante il a deja creer deux input qui on le meme ID.
Vous voyez la difference
mais l'histoire IDcount j'ai compris encore mille remerciments tu vraiment un ange
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Ah ok, c'est bizarre, je regarde ca ce soir :)

et au fait oui, l'informatique est une science exacte et logique, heureusement ;)

Cyril
Messages postés
12
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
10 septembre 2004

Pour l'informatique je lui laisse le benefice du doute jusqu'a ce soir
merci @+
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
j'ai pas eu le temps hier soir, et la j'ai plus le temps, je risque meme de pas pouvoir t'expliquer avant un bon mois :sad) car je serais occupé ...

Donc j'espere que tu n'es pas pressé d'avoir une explication, il doit y avoir une explication logique la dessous mais j'ai pas le temps d'y regarder.
dsl

@ bientot

Cyril