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 :

[C#] Comment remplir un dataset depuis un detailsView


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [C#] Comment remplir un dataset depuis un detailsView
    Bonjour à tous,

    j'ai une nouvelle question

    J'ai donc un detailsView qui a pour datasource un dataset, issue d'une classe User que j'ai créée.

    J'ai lié le detailsView au dataset ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
            User u = new User(User.Identity.Name);
            DetailsView1.DataSource = u.SelectDataSet();
            DetailsView1.DataBind();
    où u est un objet de ma classe User
    u.SelectDataSet() renvoie un dataset.

    Ceci fonctionne et j'affiche mes données dans le detailsView.

    Mais lorsque j'édite le detailsView afin de changer quelques données, je n'arrive pas ensuite à "répercuter" ces données dans le dataset.


    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
        protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
        {
            try
            {
                DetailsView1.UpdateItem(true);
            }
            catch (System.Web.HttpException e1)
            {
                Response.Write(e1.Message);
            }
        }
    mais DetailsView.UpdateItem(true) ne fonctionne pas, une erreur est générée ...

    Comment faire ??

    Merci pour vos réponses ! :hello:

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 47
    Points
    47
    Par défaut
    Salut

    Tu peux poster l'erreur et un peu plus de détail sur ton code ?

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 47
    Points
    47
    Par défaut
    RE

    Petite question bête il est bien en mode edit ton detailsview ?

    Tu peu aussi essayer avec l'event OnItemUpdated ou OnItemUpdating

    ++

  4. #4
    Membre actif Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Points : 267
    Points
    267
    Par défaut
    bonjour,
    pour l'event OnItemUpdating, il se déclenche pendant la mise à jour, et OnItemUpdated se déclenche une fois la mise à jour effectuée.

    je m'avance un peu mais je pense que ton erreur est due au fait qu'au retour du postback, donc lorsque tu te trouve dans ton événement, ton dataset est vide?!! mais je peux me tromper... lol

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Bonjour et désolé pour cette réponse un peu tardive.

    Voilà, j'ai un peu modifié mon code, mais je reste confronté à ce problème d'update.

    En deux mots,

    Lorsque l'utilisateur se connecte:

    - je récupère son domaine/user
    - j'initialise un objet de la classe User
    - je lance la méthode performSearch() de la objet user créé

    Voici le code de default.aspx.cs:
    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
     
     
     
    public partial class _Default : System.Web.UI.Page
    {
     
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                User u = new User();
                u.PerformSearch(User.Identity.Name);
                Session["Identity"] = User.Identity.Name;
                Session["UserDs"] = u.DS;
            }
        }
    }
    Voici ma classe User:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
     
    public class User
    {
        private DataSet _ds;
        private string _domain;
        private string _userName;
        private String[] _properties = new string[] { "cn", "sn", "givenName"};
        public User()
        {
            _ds = new DataSet("User");
        }
     
        public void PerformSearch(string identity)
        {
     
            _domain = identity.Split('\\').GetValue(0).ToString();
            _userName = identity.Split('\\').GetValue(1).ToString();
     
            DataTable dt = new DataTable("infos");
            foreach (string property in _properties)
            {
                dt.Columns.Add(property);
            }
     
            DirectoryEntry _ldap = new DirectoryEntry("LDAP://a00dctdm01.za.if.atcsg.net/DC=za,DC=if,DC=atcsg,DC=net", "a78ediadmin", "azerty");
            DirectorySearcher searcher = new DirectorySearcher(_ldap);
            searcher.Filter = "(sAMAccountName="+_userName+")";
            searcher.SearchScope = SearchScope.Subtree;
            searcher.SearchRoot = _ldap;
            searcher.PropertiesToLoad.AddRange(_properties);
     
            foreach (SearchResult result in searcher.FindAll())
            {
     
                DirectoryEntry DirEntry = result.GetDirectoryEntry();
                DataRow dr = dt.NewRow();
     
                foreach (string property in _properties)
                {
                    dr[property] = DirEntry.Properties[property].Value;
                }
                dt.Rows.Add(dr);
            }
            _ds.Tables.Add(dt);        
     
        }
     
        public DataSet SelectDataSet(DataSet ds)
        {
            _ds = ds;
            return _ds;
        }
     
        public DataSet UpdateDataSet( DataSet ds)
        {
            _ds = ds;
            //Mise à jour AD
            return _ds;
        }


    Et voici le code de ma page default.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
     
     
    <body>
        <form id="form1" runat="server">
        <div>
            <br />
            <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                </Columns>
            </asp:GridView>
            <br />
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="System.Data.DataSet"
                SelectMethod="SelectDataSet" TypeName="User" UpdateMethod="UpdateDataSet">
                <SelectParameters>
                    <asp:SessionParameter Name="ds" SessionField="UserDs" Type="Object" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:SessionParameter Name="ds" SessionField="UserDs" Type="Object" />
                </UpdateParameters>
            </asp:ObjectDataSource>
        </form>
    </body>

    J'ai l'erreur suivante lorsque je tente de mettre à jour mon gridView:


    Impossible de trouver une propriété nommée 'cn' sur le type spécifié par la propriété DataObjectTypeName dans ObjectDataSource 'ObjectDataSource1'.
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.InvalidOperationException: Impossible de trouver une propriété nommée 'cn' sur le type spécifié par la propriété DataObjectTypeName dans ObjectDataSource 'ObjectDataSource1'.

    Erreur source:

    Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.

    Trace de la pile:


    [InvalidOperationException: Impossible de trouver une propriété nommée 'cn' sur le type spécifié par la propriété DataObjectTypeName dans ObjectDataSource 'ObjectDataSource1'.]
    System.Web.UI.WebControls.ObjectDataSourceView.BuildDataObject(Type dataObjectType, IDictionary inputParameters) +486
    System.Web.UI.WebControls.ObjectDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +1328
    System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +78
    System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +1215
    System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +858
    System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
    System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +117
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
    System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +115
    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +163
    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102




    Je desespère, je m'y prend mal. ça n'a pas l'air compliqué mais j'y arrive pas ....

    Meric pour votre aide !!!

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/09/2010, 14h00
  2. Comment remplir un Dataset avec toutes les tables d'une db?
    Par Mr_Welby dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/05/2007, 15h29
  3. [.net2.0] comment remplir un dataset typé
    Par dietrich dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 23/01/2007, 13h57
  4. [debutant/moyen]comment remplir un TTreeView depuis SQL
    Par Leelith dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2006, 00h49
  5. Réponses: 19
    Dernier message: 13/03/2006, 13h06

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