none
CS1061: 'System.EventArgs' ne contient pas une définition pour 'Item' et aucune méthode d'extension 'Item' acceptant un premier argument de type 'System.EventArgs' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) RRS feed

  • Question

  • Bonjour, j'ai le message d'erreur et je ne sais pas comment je peux le régler...
    En fait, j'ai créé ma liste [<asp:ListView] avec la pagination...

    et j'ai eu le message d'erreur suivant :

    Message d'erreur du compilateur: CS1061: 'System.EventArgs' ne contient pas une définition pour 'Item' et aucune méthode d'extension 'Item' acceptant un premier argument de type 'System.EventArgs' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) (Ligne: 114 )

    Mes pools d'applications  avec la version 4.0.30319 du .NetFramework
    Compilateur Microsoft (R) Visual C# 2010 version 4.0.30319.1

    voici le code :

    protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
            {
    
                ListViewDataItem dataItem = (ListViewDataItem)e.Item; ////// Ligne: 114 
                DataRowView drv = (DataRowView)e.dataItem.DataItem; 
    


    et j'utilise

    using System;
    using System.Collections;
    using System.Configuration;
    
    using System.Collections.Generic; // aussi // pour ...> Linq
    
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    
    using System.Linq;
    using System.Xml.Linq;
    
    using System.Web;
    using System.Web.Configuration;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    


    Est ce que c'est à cause du quoi ? pourriez vous m'aider ?

    M'erci


     

     

     

    vendredi 2 décembre 2011 19:25

Réponses

  • DataRowView drv = (DataRowView)e.dataItem.DataItem; 
    

    Cette ligne me parait incorrect e.dataItem.DataItem n'existe pas, c'est plutôt e.Item.DataItem.

    Est-ce que System.Data et System.Web.Extensions.dll sont bien référencées dans votre projet ?

    Vérifiez aussi dans les propriété de votre projet que vous utilisez le Framework .NET 3.5 ou supérieur.

    Il faut aussi noter que DataItem obtient ou définit l'objet de données sous-jacent auquel l'objet ListViewItem est lié. ça peut être un DataRowView comme ça peut être autre chose.

    Je vous ai fait un petit exemple:

    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Drawing" %>
    <!DOCTYPE html>
    <html>
    <head runat="server">
        <title></title>
        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack) BindListView();
            }
    
            protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
            {
                if (e.Item.ItemType == ListViewItemType.DataItem)
                {
                    Label label1 = (Label)e.Item.FindControl("label1");
                    int i = (int)e.Item.DataItem;
                    label1.Text = "row" + i;
                    if (i % 2 == 0) label1.ForeColor = Color.Green;
                }
            }
    
            private void BindListView()
            {
                ListView1.DataSource = Enumerable.Range(1, 100);
                ListView1.DataBind();
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView1_ItemDataBound">
                <LayoutTemplate>
                    <table>
                        <tr>
                            <th>
                                Colomn1
                            </th>
                        </tr>
                        <tr runat="server" id="itemPlaceholder" />
                    </table>
                </LayoutTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:Label ID="label1" runat="server" />
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:ListView>
        </div>
        </form>
    </body>
    </html>
    


     


    aelassas.free.fr

    • Modifié Link.frEditor mardi 6 décembre 2011 00:01 Ajout du code
    • Marqué comme réponse aspkiddy mardi 6 décembre 2011 14:54
    lundi 5 décembre 2011 23:43
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Votre cast peut être à l'origine du problème. Pour déterminer quel type d'élément (élément de données, élément vide ou élément d'insertion) est créé, utilisez la propriété ItemType de l'objet ListViewItem. Voici un exemple tiré de la documentation MSDN:

    protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        Label EmailAddressLabel;
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            // Display the e-mail address in italics.
            EmailAddressLabel = (Label)e.Item.FindControl("EmailAddressLabel");
            EmailAddressLabel.Font.Italic = true;
    
            System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
            string currentEmailAddress = rowView["EmailAddress"].ToString();
            if (currentEmailAddress == "orlando0@adventure-works.com")
            {
                EmailAddressLabel.Font.Bold = true;
            }
        }
    }
    

    Cordialement,



    aelassas.free.fr
    samedi 3 décembre 2011 10:28
    Auteur de réponse
  • Bonjour, ASPkiddy,

     

    Est-ce que vous avez testé la solution proposée ? Merci de tenir la communauté informée sur la suite de vos démarches.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 5 décembre 2011 10:20
  • Bonjour Link.fr,

    J'ai utilisé ton code en éliminant les parties inutiles dans mon code : voici le code :

     protected void AbonnementListView_ItemDataBound(object sender, ListViewItemEventArgs e)
            {
                
                System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
               
            }
    



    J'arrive afficher une partie de la liste sans erreur. Une partie parce que je n'ai pas encore terminé...

    Par contre, je ne sais pas comment je peux adapter dans mon code... L'affichage très long en ce moment!!!

      protected void AbonnementListView_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
    
                System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView; 
                ListViewDataItem dataItem = (ListViewDataItem)e.Item;
              //  DataRowView drv = (DataRowView)e.dataItem.DataItem; // lorsque cette ligne n'est pas commentée, le mot suivant est souligné dans "Microsoft Visual Web Developer 2010 WD Express" : dataItem ; avec le message suivant :
    
    //'System.Web.UI.WebControls.ListViewItemEventArgs' ne contient pas une définition pour 'dataItem' et aucune méthode d'extension 'dataItem' acceptant un premier argument de type 'System.Wb.UI.WebControls.ListViewItemEventArgs' n'a été trouvée (une directive using ou une référence d'assembly est-elle marquante ?)
    

    Merci pour votre aide

     

    lundi 5 décembre 2011 15:42
  • Comme d'habitude je fais ainsi comme vous m'avez demandé... par contre je suis au Québec, donc je suis en retard de 6 heures... d'où vient de ma silence...

     

    Bonne journée

     

    lundi 5 décembre 2011 15:44
  •  //  DataRowView drv = (DataRowView)e.dataItem.DataItem; // lorsque cette ligne n'est pas commentée, 
    // le mot suivant est souligné dans "Microsoft Visual Web Developer 2010 WD Express" : dataItem ; avec le message suivant :
    // 'System.Web.UI.WebControls.ListViewItemEventArgs' ne contient pas une définition pour 'dataItem'
    // et aucune méthode d'extension 'dataItem' acceptant un premier argument
    // de type 'System.Wb.UI.WebControls.ListViewItemEventArgs'
    // n'a été trouvée (une directive using ou une référence d'assembly est-elle marquante ?)

    C'est normal que vous ayez cette erreur car vous ne testez pas le type d'élément (élément de données, élément vide ou élément d'insertion).

    Si vous désirez travailler qu'avec les éléments de type de données, il faut que vous fassier un test sur le type de l'élément:

      if (e.Item.ItemType == ListViewItemType.DataItem)
    System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;

    aelassas.free.fr
    lundi 5 décembre 2011 19:09
    Auteur de réponse
  • Bonjour Link.fr, Merci pour vos aides...

    C'est normal que vous ayez cette erreur car vous ne testez pas le type d'élément (élément de données, élément vide ou élément d'insertion).

    Si vous désirez travailler qu'avec les éléments de type de données, il faut que vous fassier un test sur le type de l'élément:

      if (e.Item.ItemType == ListViewItemType.DataItem)
    System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;

    Mais Ça ne change pas du tout, avec l'exemple suivante, j'ai toujours le même erreur :

     protected void AbonnementListView_ItemDataBound(object sender, ListViewItemEventArgs e)
          
    
            {
    
                if (e.Item.ItemType == ListViewItemType.DataItem)
                {
                    System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
                
                
                    ListViewDataItem dataItem = (ListViewDataItem)e.Item;
                    DataRowView drv = (DataRowView)e.dataItem.DataItem; 
    

    Sûrement, il y a quelques choses que vous voulez dire et que je ne comprends pas bien...

     

    lundi 5 décembre 2011 20:01
  • DataRowView drv = (DataRowView)e.dataItem.DataItem; 
    

    Cette ligne me parait incorrect e.dataItem.DataItem n'existe pas, c'est plutôt e.Item.DataItem.

    Est-ce que System.Data et System.Web.Extensions.dll sont bien référencées dans votre projet ?

    Vérifiez aussi dans les propriété de votre projet que vous utilisez le Framework .NET 3.5 ou supérieur.

    Il faut aussi noter que DataItem obtient ou définit l'objet de données sous-jacent auquel l'objet ListViewItem est lié. ça peut être un DataRowView comme ça peut être autre chose.

    Je vous ai fait un petit exemple:

    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Drawing" %>
    <!DOCTYPE html>
    <html>
    <head runat="server">
        <title></title>
        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack) BindListView();
            }
    
            protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
            {
                if (e.Item.ItemType == ListViewItemType.DataItem)
                {
                    Label label1 = (Label)e.Item.FindControl("label1");
                    int i = (int)e.Item.DataItem;
                    label1.Text = "row" + i;
                    if (i % 2 == 0) label1.ForeColor = Color.Green;
                }
            }
    
            private void BindListView()
            {
                ListView1.DataSource = Enumerable.Range(1, 100);
                ListView1.DataBind();
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView1_ItemDataBound">
                <LayoutTemplate>
                    <table>
                        <tr>
                            <th>
                                Colomn1
                            </th>
                        </tr>
                        <tr runat="server" id="itemPlaceholder" />
                    </table>
                </LayoutTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:Label ID="label1" runat="server" />
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:ListView>
        </div>
        </form>
    </body>
    </html>
    


     


    aelassas.free.fr

    • Modifié Link.frEditor mardi 6 décembre 2011 00:01 Ajout du code
    • Marqué comme réponse aspkiddy mardi 6 décembre 2011 14:54
    lundi 5 décembre 2011 23:43
    Auteur de réponse
  • Merci Link.fr,

    Tout va bien...

    j'ai aussi vérifie :

    • les références System.Data
    • System.Web.Extensions
    • Framework .NET 4

    Merci pour l'explication avec le code...

     

    Bonne journée
    mardi 6 décembre 2011 14:54