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 :

[ASP][NET1.1]Probleme avec la fonction DataBinder.Eval()


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Par défaut [ASP][NET1.1]Probleme avec la fonction DataBinder.Eval()
    Slt,

    J'ai un probleme avec la fonction DataBinder.Eval() dans ma page asp.

    Dans mon code behdin, je crée et remplie une dataTable comme ceci:

    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
     
    DataTable myDt = new DataTable("Infos");
     
     
    myDt.Columns.Add(new DataColumn("FileName", typeof(String)));
    myDt.Columns.Add(new DataColumn("Date", typeof(DateTime)));
    myDt.Columns.Add(new DataColumn("Area", typeof(String)));
    myDt.Columns.Add(new DataColumn("NumberOfProjects", typeof(Int32)));
    myDt.Columns.Add(new DataColumn("NumberOfDocuments", typeof(Int32)));
    myDt.Columns.Add(new DataColumn("TypeOfPCR", typeof(String)));
     
    DataRow row = myDt.NewRow();
     
    // Fill each column
    row["FileName"] = "Test_nom_de_fichier";
    row["Date"] = DateTime.Now;
    row["NumberOfProjects"] = "8";
    row["NumberOfDocuments"] = "10";
    row["Area"] = "Collaboration";
    row["TypeofPCR"] = PCR_TYPE;
     
    // Add the row to the DataTable
    myDt.Rows.Add(row);
     
    DataView myDv = new DataView(myDt);
     
    MyDataGrid.DataSource = myDv;
    MyDataGrid.DataBind();
    Maintenant dans mon fichier ASP, en plus des 6 colonnes de ma DataTable, je lui ajoute une colonne avec une textBox par ligne. Pour chacune de ces textBox, je souhaiterais leur affecter comme ID la valeur de row["FileName"] = "Test_nom_de_fichier";, cest a dire "Test_nom_de_fichier".

    Pour cela j'ai testé ceci:

    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
     
    <asp:DataGrid 
    	id="MyDataGrid"
    	runat="server" 
    	AutoGenerateColumns="False"
    >
     
    <Columns>
    	<asp:TemplateColumn>
                     <ItemTemplate>	
    			<asp:CheckBox 
                                   id='DeleteThisReport_<%# DataBinder.Eval(Container.DataItem, "FileName")%>' 
    			       runat="server" 
    			/>
    		</ItemTemplate>
    	</asp:TemplateColumn>
    	<asp:HyperLinkColumn 
    		HeaderText="See detail"
                    DataNavigateUrlField="FileName" 
    		Text="Detail"
                    DataNavigateUrlFormatString="~/PCRDetailsPage.aspx?filename={0}"
    		Target="_new"
    	/>
    	<asp:BoundColumn 
    		DataField="Date" 
    		HeaderText="Date" 
    	/>
    	<asp:BoundColumn 
    		DataField="Area" 
    		HeaderText="Area" 
    	/>
    	<asp:BoundColumn 
    		DataField="NumberOfProjects" 
    		HeaderText="Nb of project" 
    	/>
    	<asp:BoundColumn 
    		DataField="NumberOfDocuments" 
    		HeaderText="Nb of file" 
    	/>
    	<asp:BoundColumn 
    		DataField="TypeOfPCR" 
    		HeaderText="Type"
    	/>
    	</Columns>
    </asp:DataGrid>
    A l'execution jai cette erreur:

    'DeleteThisReport_<%# DataBinder.Eval(Container.DataItem, "FileName")%>' is not a valid identifier
    Pourquoi cette erreur? j'ai pourtant bien ma colonne qui sàppelle "Filename" dans ma dataTable.

    Merci d'avance.
    ++

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    j'ai eu le meme probleme apres quelques temps de prise de tete j'en ai eu marre et je l'ai fais dans le DataBound.
    Si qqn a une solution je suis preneur

  3. #3
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Mélanger du code-behind et du déclaratif c'est pas la fête pour maintenir ton code. Tu devrais choisir l'un des deux, ça serait moins crade.

    Ensuite pourquoi affecter une ID à tes TextBox ?
    Si c'est juste pour pouvoir faire un FindControl derrière, c'est carrément barbare comme solution.
    Je te suggère plutôt de générer ta colonne de Textbox en code-behind, comme les autres colonnes.
    En fait, je comprend même pas pourquoi une solution aussi tordue t'es venue à l'esprit... tu veux faire quoi en fait, au final ?

  4. #4
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Par défaut
    Slt Mose,

    En fait j'ai fait une ptite erreur dans mon message. Ce n'est pas des textBox mais des Checkbox (oui, jaurais du me relire!!). Je veux affecter un ID unique a chacune de ces checkbox (ID qui correspondondrait a un nom de fichier et dont ce nom correspond à la valeur du champ d'une colonne de ma DataGrid).
    Au final, le but est qu'avec un bouton je supprime les fichiers dont les checkbox associés ont été cochées.
    Voici ce que je veux:

    CheckBox | Nom des fichiers | Autres colonnes | ....
    ---------------------------------------------------
    "case cochée1" exemple1.txt
    "non cochée2" exemple2.xls
    "case cochée3" exemple3.xml
    ......
    ----------------------------------------------------


    |Supprimer|
    Donc ici "case cochée1" aurait comme ID exemple1.txt, "non cochée2" -> exemple2.xls, etc..
    Et donc avec le bouton supprimer je recupérerais les ID (et donc les nom des fichiers) des checkbox pour ensuite supprimer les fichiers correspondants.

    C'est la seule solution que j'ai trouvé pour laisser le choix à l'utilisateur supprimer un ou plusieurs fichiers. Si tu connais une autre solution, je suis preneur.

    Je te suggère plutôt de générer ta colonne de Textbox en code-behind, comme les autres colonnes.
    Bon je suppose que textbox ou checkbox ca revient au meme...
    J'ai posté il n'y a pas longtemps deja un post sur comment faire ca, mais je n'ai malheureusement pas eu de reponses. Car c'est vrai que l'ideal serait de faire ce que je veux faire dans le code-behind.
    http://www.developpez.net/forums/sho...d.php?t=318045

    A+

  5. #5
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ouaip, c'est pas la bonne façon de faire.
    Une solution courante (pas la meilleure, mais moins tordue que la tienne )

    * Tu créés ta colonne et tu mets un ID à tes checkbox (note : ASP.Net génèrera tout seul un "ClientID" unique)
    * Dans ton code behind, quand tu vas chopper ton évènement de suppression, tu boucles sur tes lignes.
    * Pour chaque ligne tu consultes l'état de la checkbox et tu supprimes la ligne associée

    Ca conviendrait ?

  6. #6
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Par défaut
    Slt Mose,

    * Tu créés ta colonne et tu mets un ID à tes checkbox (note : ASP.Net génèrera tout seul un "ClientID" unique)
    En effet, je viens de regarder le code source de ma page ASP resultante, et en mettant comme ID -> "DeleteThisReport" pour chaque checkbox dans le code ASP, je me retrouve avec un ID ressemblant à MyDataGrid__ctl2_DeleteThisReport. Mais alors, comment je fais?
    Pour les checkbox, tu les crées avec le code behind (si oui, comment fais tu ca?) ou dans le code ASP (comme j'ai fait plus haut dans mon code)?

    Pour chaque ligne tu consultes l'état de la checkbox et tu supprimes la ligne associée
    En fait supprimer la ligne de ma dataGrid m'importe peu, car la dataGrid est construite grace a d'une fonction qui liste les fichiers present dans un repertoire stocké sur le serveur (un peu comme la commande dir sous DOS). Donc si jarrive à supprimer le fichier en question, alors c'est gagné car un rafraichissement de la page ASP mettra à jour la dataGrid automatiquement.

    Tu vois ce que je veux faire ou pas du tout?

    A+

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

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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