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 :

[VB.Net] Repeater , contenu dynamique


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut [VB.Net] Repeater , contenu dynamique
    bonjour,


    j'ai creer un repeater, contenant sur chaque ligne 2 champs. l'un est un label, et le 2 doit etre dynamique et fonction du type de données présent dans ma base.

    alors pour le moment , jarrive tres bien a differencier le type de donnée, mais je ne vois vriament pas comment rendre invisible le champ qui ne m'est pas utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <td>
                                <asp:Label id="champ_lab" text='<%# DataBinder.Eval(Container.DataItem, "champ_label") %>' runat="server" />
                            </td>
                            <td>
                                <asp:textbox id="champ_text" visible="false" Text='<%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>' Runat="server" />
                                <asp:CheckBox id="champ_checkbox" visible="false" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>'></asp:CheckBox>
                            </td>
    typiquement j'aimerai que seule l'un des 2 champs coloré s'affiche.
    le code , pour mettre a jour ces champs est :

    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
    Public Sub new(newchamp_label2 As String, newchamp_textbox2 As String, type as string )
          Me.champ_label2 = newchamp_label2
          select type
     
             case "System.String"
     
                Me.champ_textbox2 = type
     
             case "System.Boolean"
     
                Me.champ_checkbox2 = type
     
             case "System.Double"
     
                Me.champ_textbox2 = type
     
             case "System.int32"
     
                Me.champ_textbox2 = type
     
          end select
     
        End Sub
    le = type pour le moment ne sert a rien . c'etait plutot pour voir si j'arrivais a les differencier et c'est le cas. Sauf pour le Boolean qui ne fonction pas.

    Qqqun pourrait donc t il maidé ?

    merci d'avance

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Si je comprend bien , tu veux afficher soit un TextBox soit une Chackbox selon la valeur d'un champ string de ton objet ?
    Genre si c'est "System.String", alors c'est textbox et si c'est System.Boolean, alors c'est checkbox ?

    Alors fait plutot un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <td>
       <asp:textbox id="champ_text" visible="false" Text='<%#    DataBinder.Eval(Container.DataItem, "champ_textbox") %>' Runat="server" />
       <asp:CheckBox id="champ_checkbox" visible="false" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>'></asp:CheckBox>
    </td>
    Puis dans le code behind, tu consomme l'evement ItemDataBoubd et tu fais un truc du genre :

    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
    	protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    	{
    		if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    		{
    			MonItem item = e.Item.DataItem as MonItem;
     
    			switch (item.Type)
    			{
    				case "System.String":
    					e.Item.FindControl("champ_text").Visible = true;
    					break;
     
    				case "System.Booleen":
    					e.Item.FindControl("champ_checkbox").Visible = true;
    					break;
    			}
     
    		}
    	}
    dans ce cas, j'utilise un objet MonItem comme ça :

    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
    public class MonItem
    {
    	private string _type;
    	public string Type
    	{
    		get { return _type; }
    		set { _type = value; }
    	}
     
    	private string _champ_textbox;
     
    	public string champ_textbox
    	{
    		get { return _champ_textbox; }
    		set { _champ_textbox = value; }
    	}
     
    	public MonItem(string type)
    	{
    		_type = type;
    	}
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    non cela ne passe pas,

    j'ai un probleme avec l'acces au elements du repeater
    peu importe lendroit ou je me trouve , il me dit qu'il ne connais pas l'element

    RepeaterIt.FindControl("champ_text")

    je peux y avoir acces mais pas avant que mon repeater soit binder -.-
    je ne comprend pas pourquoi je ne peu acceder ou je veux a des elements qui sont pourtant declarer dans mon code aspx

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    c'est normal. Quand tu met une texbox coté ASP dans le ItemTemplate de ton repeater, cette textbox (avec par exemple l'ID xhamp_textbox) sera répété par autant de ligne du repeater une fois binder.
    Donc, le framework te renomme le champ ID du textbox (car il ne peut y avoir qu'un seul control par ID dans une page HTML), soit :

    Repeater1::champ_textbox
    Repeater2::champ_textbox
    Repeater3::champ_textbox
    ...

    Donc du coup, tu ne peux pas faire : monRepeater.FindControl("champ_textbox") car ce controle n'existe pas au sein du repeater. Il existe au sein de chamque repeaterItem.

    C'est pourquoi tu doit mettre le code que je t'ai donné dans l'évenement OnItemDataBound Cet evenemtn est décmenché à chaque fois que le repeater à binder un élement (une ligne) de ta source de donnée.
    Ensuite, tu accède aux controles de la ligne qui vient d'être "bindée" dans ton repeater grace au parametre RepeaterItemEventArgs, soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Item.FindControl("champ_textbox");
    Ce qu'il faut garder en tête, c'est que t'es controle sont inaccessible tant que le "bindage" n'as pas eu lieu. Donc tu le fais dans les évenement qui sont déclenché APRES le bindage (OnItemDataBound par exemple)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    marci beaucoup guitoux, je vais y travailler.

    tes connaissance n'ont d'egale que ta candeur

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    derniere petite question

    pour mon repeater, je lui donne comme source de "bindage" un arraylist. il les prend donc tous en une fois.
    ma question est, donc d'apres ce que tu dis ma fonction on itemdatabound va etre lancé autant de fois que jaurai d'élement dans mon arraylist et cela, malgre que j'ai tout binder d'un coup ?

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    oui. Le fait d'appekler la méthode DataBind() lance le processus de binding, qui lancera levenement OnItemDataBound pour chacun des item à binder

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    		{
    			MonItem item = e.Item.DataItem as MonItem;
    ok j'ai juste un peu de mal avec cela.

    ce qui me permet de connaitre le type de donnée c pas le repeater , c'est le parcours de mon dataset par la commande
    ds.tables("datestest").Columns(Ds.tables("datestest").Columns(i).ColumnName).DataType.ToString()
    or, celle ci prend en parametre i , numero de ligne

    alors soit ce que tu as mis est valide qd meme et je peux obtenir le type de donnée soit je dois qqpart faire passer mon numero de ligne pour pouvoir faire mon select sur cette variable. car je ne vois helas pas d'ou tu sors ton
    MonItem item

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    car je ne vois helas pas d'ou tu sors ton
    MonItem item
    Comme je l'ai dit plus haut, MonItem est un objet que j'ai créé.
    Dans ton cas, vu que tu travail avec un DataSet, la propriété DataItem ton ton RepeaterItem (e.Item) sera de type DataRowView, ce qui correspond à la ligne en cours de "lecture" de ton DataSet. Tu comprends donc là que tu n'as pas besoin de l'index de ta ligne, vu que tu lis directement cette ligne.
    Donc, pour toi, ça va donner ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
       DataRowView item = e.Item.DataItem as DataRowView;

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    bonjour tout le monde,

    nouvelle semaine qui commence

    alors, j'ai reussi a mettre en place ce que tu me disais guitoux, en modifiant un peu le code

    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
    if (e.Item.ItemType = ListItemType.Item or e.Item.ItemType = ListItemType.AlternatingItem)
    
                 Dim item as New monObjet("", "")
      
                 item = e.Item.DataItem
    
                 response.write(item.Gettype())
    
                    case "System.String"
                       e.Item.FindControl("champ_textbox").Visible = true
    
                    'case "System.Boolean"
                       e.Item.FindControl("champ_checkbox").Visible = true
    
               end select
    
              end if
    J'ai ainsi declaré item en tant que monobjet, car on est obligé de tout delcarer en vb.net
    mon probleme, cest que lors du response.write du gettype, j'obtiens le meme affichage

    ASP.inserer_mobile_aspx+MonObjet -.-
    la j'avoue que je ne comprend pas. Peut tu m'aider a y voir plus clair ?
    merci

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    en fait pour lui ,

    e.Item.DataItem est de type monobjet. Alors que je pensais acceder au element du repeater. mais ou est l'erreur alors ?

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Je comprends pas trop là
    Toujours est-il que c'est normal que e.Item.DataItem soit de type monObjet.
    Pour récupérer l'élément de repeater, c'est e.Item

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    c bon ca marche

    alors

    voici le code :

    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
       Dim CommandText As String
             Dim cmd As New OleDbCommand()
     
             CommandText= session("requete").tostring
     
     
             Dim myConnection As New OledbConnection(ConnectionString)
             Dim myCommand As New OledbDataAdapter(CommandText, myConnection)
     
     
             Dim ds As New DataSet()
             myCommand.Fill(ds,"datestest")
     
             if (e.Item.ItemType = ListItemType.Item or e.Item.ItemType = ListItemType.AlternatingItem)
     
                Select ds.tables("datestest").Columns(Ds.tables("datestest").Columns(count).ColumnName).DataType.ToString()
     
                case "System.String"
                  e.Item.FindControl("champ_textbox").Visible = true
     
                case "System.Boolean"
                  e.Item.FindControl("champ_checkbox").Visible = true
     
                end select
     
                count = count + 1
     
             end if
    j'effectue un test pour en 1er lieu savoir si on est bien dans le les templates du repeater ( et pas ds le footer ou le header ).
    puis , j'effectue un select sur le type de donnée présent dans la base a la colonne "count" du repeater. Ainsi, je vais tester dans ma base la nature du 3echamp, puis, en fonction du resultat, j'afficherais dans mon repeater le bon élement. En y reflechissant, j'ai compris que j'avais quand meme besoin du dataset, et que mon repeater ne pouvait pas connaitre les type de chaque champs de ma table.

    merci pour tout guitoux !

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Je comprends pas ton code la. Tu l'as mis dans le OnItemDataBound ?

    De plus, tu ne connais pas le nom de la colonne sur laquelle tu fais le test sur le type de données ? Car si c'est la cas, ya mieux comme code. Le tiens fonctionne, ok, mais c'est très lourd !! se connecter à la BDD et en sortir un DataSet à chaqsue création d'un item dans le repeater !! Alors que tu as toutes tes données sous la main avec le e.Item.DataItem !!
    Imagines si tas une centaines déléments dans ton repeater !!

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    alors, oui jai mis cela dans mon onitemdatabound.

    sachant que je binde mon dataset sur une table dynamique, je ne connais aucun des nom de champs a lavance. jai conscience que cela est lourd comme methode, mais je n'arrive pas a obtenir quelquchose de similaire avec e.Item.DataItem. D'ailleurs en quel mesure ce dernier peut il connaitre le type de mon champ?
    il est crée a partir de monArray.add(New monObjet(ds.tables("datestest").Columns(i).ColumnName, ""))
    et il ne peu donc en théorie en aucune mesure connaitre la nature du type de champ de ma bd non ?

    si tu connais une autre methode que le mass connexion , dis le moi, et j'essaierai de l'implementer.
    merci encore

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    sachant que je binde mon dataset sur une table dynamique, je ne connais aucun des nom de champs a lavance
    Alors pourquoi tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>
    dans la page ASPX ? C'est bien qu'à un moment donné tu alimente la propriété champ_textbox avec le contenu d'un champ de ta BDD ?

    Quel est le code que tu utilise pour alimenter tes objets MonObjet ? D'où sors-tu la valeur de champ_textbox et champ_label ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    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
    public class MonObjet
     
            Inherits System.Web.UI.Page
     
            Public champ_label2 As String
            Public champ_textbox2 As String
     
            Public ReadOnly Property champ_label As String
                 Get
                    Return champ_label2
                End Get
            End Property
     
            Public ReadOnly Property champ_textbox As String
                 Get
                    Return champ_textbox2
                End Get
            End Property
     
            Public Sub new(newchamp_label2 As String, newchamp_textbox2 As String )
     
              Me.champ_label2 = newchamp_label2
              Me.champ_textbox2 = newchamp_textbox2
     
            End Sub
     
     
     
        end class
    typiquement je pense que je pourrais supprimer ce
    <%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>
    car il me sert uniquement pour alimenter les label et leur champ text. en revanche je n'ai rien de particulier a faire sur les textbox et checkbox des le depart. apres en effet je ne sias pas si dans cette partie je ne passerai le type de champs. mais pour le moment je ne men sers pas.

    le code pour alimenter mon objet est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i=1 to ds.tables("datestest").Columns.Count-1
     
                    monArray.add(New monObjet(ds.tables("datestest").Columns(i).ColumnName, ""))
     
                 next i
     
                Repeater1.DataSource = monArray
                Repeater1.DataBind()

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Pourquoi ta classe MonObjet hérite de System.Web.UI.Page ???
    Et pourquoi tu ferais pas plutot une classe MonObjet comme ça (C#):
    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 class MonItem
    {
       private Type _typeChamp;
       public Type TypeChamp
       { 
          get { return _typeChamp; }
       }
     
       private string _name;
       public string Nom
       {
          get { return _name; }
       }
     
       public MonItem(string nomChamp, Type typeChamp)
       {
          _name = nomChamp;
          _typeChamp = typeChamp;
       }
    }
    Que tu alimenterais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i=1 to ds.tables("datestest").Columns.Count-1
     
                    monArray.add(New monObjet(ds.tables("datestest").Columns(i).ColumnName, ds.tables("datestest").Columns(i).DataType))
     
                 next i
     
                Repeater1.DataSource = monArray
                Repeater1.DataBind()
    Puis dans ton OnItemDataBoubd :
    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
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    	{
    		if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    		{
    			MonItem item = e.Item.DataItem as MonItem;
     
    			switch (item.TypeChamp)
    			{
    				case typeof(string) :
    					e.Item.FindControl("champ_text").Visible = true;
    					break;
     
    				case typeof(bool) :
    					e.Item.FindControl("champ_checkbox").Visible = true;
    					break;
    			}
     
    		}
    	}

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    ouaip je vien de faire comme tu me lavais suggerer
    merci encore cest bien moins lourd en effet

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    bonsoir guitoux,

    jai un dernier probleme.
    la validation de mon repeater se fait par lappuie sur un bouton qui est contenue dans mon repeateur.

    La fonction prend donc en argument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sender As Object, e As System.EventArgs
    cette fonction se charge de realiser l'update de mon dataset. je procédait ainsi :
    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
     
    Dim RepeaterIt As RepeaterItem
    Dim monTxtResultat As new TextBox
    Dim monTxtLabel   as New Label
    Dim tampon as string
     
    For Each RepeaterIt In repeater1.Items
     
                monTxtLabel = RepeaterIt.FindControl("champ_Lab")
                monTxtResultat = RepeaterIt.FindControl("champ_textbox")
                tampon = monTxtLabel.text
     
                if monTxtResultat.Text.length <> 0 then
                    myDataRow(tampon) = monTxtResultat.Text
     
                'else
                   ' myDataRow(tampon) = " "
                end if
     
              Next
    mais maintenant que je ne peu savoir ce que j'ai a l'avance, ( checkbox ou textbox ) je ne peux plus faire de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTxtResultat = RepeaterIt.FindControl("champ_textbox")
    tout le temps.
    j'aimerai donc idealement pouvoir tester le type de champ comme par avant en ajoutant par exemple a mon code :

    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
     
    Dim RepeaterIt As RepeaterItem
    Dim monTxtResultat As new TextBox
    Dim monTextcheckbox as new checkbox
    Dim monTxtLabel   as New Label
    Dim tampon as string
     
    For Each RepeaterIt In repeater1.Items
     
                Dim item as new monobjet("","")
                item = e.Item.DataItem
     
                select item.champ_textbox2
     
                case "System.String"
                  monTxtResultat = RepeaterIt.FindControl("champ_textbox")
                  myDataRow(tampon) = monTxtResultat.Text
     
                case "System.Boolean"
                  monTxtResultat = RepeaterIt.FindControl("champ_checkbox")
                  myDataRow(tampon) = monTxtcheckbox.checked
                case "System.Double"
                  monTxtResultat = RepeaterIt.FindControl("champ_textbox")
                  myDataRow(tampon) = monTxtResultat.Text   
                case "System.int32"
                  monTxtResultat = RepeaterIt.FindControl("champ_textbox")
                  myDataRow(tampon) = monTxtResultat.Text
                end select
     
                monTxtLabel = RepeaterIt.FindControl("champ_Lab")
                tampon = monTxtLabel.text
     
              Next
    mon problème cest que avec la signature de la fonction je nai pas acces au données que je souhaite. typiquement au e.item. jai essayé avec repeater1.item mais j'ai le meme probleme. saurais tu comment contourner la chose?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Effet visuel de Contenu dynamique
    Par kolib dans le forum ASP
    Réponses: 7
    Dernier message: 12/09/2005, 08h37
  2. Réponses: 2
    Dernier message: 09/09/2005, 10h06
  3. [VB.NET] repeater/datagrid dynamique clique d'un bouton
    Par lucie.houel dans le forum ASP.NET
    Réponses: 11
    Dernier message: 19/07/2005, 16h17
  4. [VB.NET] Treeview creer dynamiquement a partir d'une bd
    Par graphicsxp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/03/2005, 17h02
  5. [VB.NET] Repeater imbriqué
    Par Sadneth dans le forum ASP.NET
    Réponses: 8
    Dernier message: 18/02/2005, 15h31

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