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 déclencher le databinding au bon moment


Sujet :

ASP.NET

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [C#] Comment déclencher le databinding au bon moment
    Bonjour à tous !

    Je fais une petite application web pour afficher les informations d'active directory pour un user du domaine qui se connecte.

    Pour ce faire, au chargement de ma page, j'instancie un objet de ma classe User
    Ma classe User définie un dataset et possède une méthode qui fait la requête LDAP avec le nom/domaine du user connecté et rempli le dataset.
    J'ai enfin une autre méthode qui retourne le dataset.

    Je voudrais lié ce dataset à un detailView ou gridView par l'intermédiaire d'un ObjectDataSource.

    Voici le code de 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
     
     
    public class User
    {
        private DataSet _ds;
        private string _domain;
        private string _userName;
        private String[] _properties = new string[] { "cn", "sn", "givenName", "l", "postalCode", "telephoneNumber", "streetAddress", "sAMAccountName", "mail", "mailNickname" };
     
        public User()
        {
     
        }
     
        public User(string identity) : this()
        {
     
            _domain = identity.Split('\\').GetValue(0).ToString();
            _userName = identity.Split('\\').GetValue(1).ToString();
            _ds = new DataSet("User");
            this.PerformSearch();
        }
     
        public void PerformSearch()
        {
            DataTable dt = new DataTable("infos");
            foreach (string property in _properties)
            {
                dt.Columns.Add(property);
            }
     
            DirectoryEntry _ldap = new DirectoryEntry("LDAP://xxx.domain.net/DC=aaa,DC=bbb,DC=domain,DC=net", "user", "pass");
            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()
        {
            return _ds;
        }
     
    }
    Voici le code cs de ma page principale:
    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
     
     
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
        protected void ObjectDataSource1_Load(object sender, EventArgs e)
        {
     
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            User u = new User(User.Identity.Name);
            GridView1.DataBind();
        }
    }
    et voici le code de ma page
    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
     
     
    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server" OnLoad="Page_Load" DataSourceID="ObjectDataSource1">
            </asp:GridView>
     
        </div>
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="SelectDataSet"
                TypeName="User" OnLoad="ObjectDataSource1_Load"></asp:ObjectDataSource>
            <br />
            <br />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </form>
    </body>
    </html>

    Quand je clique sur bouton1, je n'ai pas de résultat, je vois que ma requête se fait mais mon gridView n'affiche rien ...

    Je pense bien que c'est parce que c'est parce que mon objectDataSource est lié à un objet user vide mais je voudrais pouvoir le lié à l'objet User u que je créé lorsque je clique sur le bouton.

    Comment faire cela ???


    Merci beaucoup pour votre aide !!

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Par défaut
    Salut comme ca à première vue je dirais qu'il te manque dans ta méthode Buttnon1_click d'affecter un datasource au gridview. Si j'ai bien compris ce datasource ça devrait être ton dataset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void Button1_Click(object sender, EventArgs e)
        {
            User u = new User(User.Identity.Name);
            GridView1.datasource = ton dataset
            GridView1.DataBind();
        }
    Voilà je pense que ça devrait être mieux

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Super ça fonctionne !!
    J'avais voulu utiliser un ObjectDataSource mais ça servait à rien !!

    Merci maverickbj !!!

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

Discussions similaires

  1. [MySQL] Comment déclencher un 2me formulaire dans une autre page
    Par jlbrenas dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 27/01/2007, 17h43
  2. [C# 2.0/NHibernate] Comment forcer le DataBinding ?
    Par cyrille_ dans le forum NHibernate
    Réponses: 2
    Dernier message: 06/08/2006, 23h17
  3. [C# 1.1./TextBox] Comment implémenter le DataBinding ?
    Par mpc dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/06/2006, 09h41
  4. Réponses: 5
    Dernier message: 11/05/2006, 11h46
  5. FAQ : Comment déclencher un évènement à l'aide d'un script?
    Par vny dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/02/2006, 16h53

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