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

Windows Presentation Foundation Discussion :

Binding entre un Datagrid et une base de donnée


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 252
    Points : 192
    Points
    192
    Par défaut Binding entre un Datagrid et une base de donnée
    bonjour à tous.
    Je re-poste ici alors que je pensais le souci réglé....
    Je suis sous VS2010 .net 4.0 et un projet en WPF en c#.
    Je souhaite afficher dans un datagrid une table d'une base de donnée, grâce à une procédure stockée.
    Mon datagrid se nomme datauser.
    Pour afficher mes données, j'essaye de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    datauser.Datacontext = sp.GetUser();
    Mais cela ne m'affiche rien, pourtant, quand je rajoute un point d'arrêt, je vois bien les données de ma table dans l'espion de VS...
    Merci d'avance pour le coup de main

  2. #2
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Salut,

    je ne l'ai pas précisé dans le précédent thread, mais un DataContext doit recevoir une INSTANCE d'objet donc sp et ensuite il faut lui dire en XAML que l'itemssource recoit la méthode :

    Dans le behind code de ta fenetre tu aurais donc :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaClasse sp = new MaClasse();
    datauser.DataContext = sp;

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <DataGrid Name="datauser" ItemsSource="{Binding GetUser}"></DataGrid>

    Attention GetUser doit être unr property donc un truc du genre :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public DataView GetUser
    {
          get {
             return mon_dataview;
          }
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 252
    Points : 192
    Points
    192
    Par défaut
    Merci pour ta réponse ultra rapide !
    Désolé mais je n'y arrive toujours pas.
    J'essaye un truc du genre :
    Code XAML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            <DataGrid AutoGenerateColumns="True" Height="92" HorizontalAlignment="Left" Margin="44,23,0,0" Name="datauser" VerticalAlignment="Top" Width="154" SelectionChanged="dataGrid1_SelectionChanged" UseLayoutRounding="True" ItemsSource="{Binding GetUser}" AllowDrop="True" DataContext="{Binding }" />
    Et le 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
     
            public MainWindow()
            {
                InitializeComponent();
                DataSet ds = new DataSet();
                DataView _dv = new DataView(ds.Tables[0]);
                datauser.DataContext = sp.GetUser();
     
                public DataView GetUser
    {
          get {
             return _dv;
          }
    }
    Je pense que je suis complètement largué... Désolé je suis débutant

  4. #4
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Bonjour,

    avant de faire du WPF avais tu déjà fais du C# en WinForm ? En fait c'est tout bête :

    Tu as une classe disons MaClasse. (La on pourra dire que je t'ai bien avancé^^)

    Code C# : 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
     
    class MaClasse : INotifyPropertyChanged
    {
         private DataView _dv;
     
          public void RemplirDataView()
         {
    	DataSet ds = new DataSet();
    	string sql = "ma requete";
    	sqlConnection connect = "ma connexion";
    	SqlCommand cmd = new SqlCommand(sql, connect);
    	SqlDataAdapter verif = new SqlDataAdapter(cmd);
    	verif.Fill(ds);
     
    	_dv = new DataView(ds.Tables[0]);
     
     
    	// Je ne l'écris pas mais ne pas oublier de fermer la connexion
     
         }
     
         public DataView GetUser
         {
                 get { return _dv; }
                 set
                 {
                    if (this._dv != value)
                    {
                        this._dv= value;
                        OnPropertyChanged(m => m.GetUser);
                    }
                 }
         }
     
         #region PropertyChanged
           public event PropertyChangedEventHandler PropertyChanged;
     
           private void OnPropertyChanged<TResult>(Expression<Func<MaClasse, TResult>> arbo)
           {
                if (this.PropertyChanged != null)
                {
                    var memberExpression = arbo.Body as MemberExpression;
     
                    if (memberExpression == null || memberExpression.Member.MemberType != MemberTypes.Property)
                    {
                        throw new InvalidOperationException("OnPropertyChanged doit être appelé depuis une propriété publique");
                    }
                    this.PropertyChanged(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
                }
     
            }
         #endregion
    }

    Ensuite dans le code XAML tu enleve juste le DataContext que tu as mis, le reste est bon. Puis dans le code behind de la fenetre tu aura juste :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaClasse sp = new Maclasse();
    sp.RemplirDataView();
    datauser.DataContext = sp;

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 252
    Points : 192
    Points
    192
    Par défaut
    Bonjour
    Merci pour ta réponse, ça marche enfin, ça fait vraiment plaisir !
    En fait j'ai déjà fais du winform il y a quelques années (2 ou 3) sous VS2005 express mais sans trop poussé, à l'aide d'un livre et ce n'était pas du tout aussi compliqué.
    Autant que je me souvienne sous Winform j'avais mis un Datagrid ou assimilé et une flèche au dessus m'est apparu pour sélectionner les données de ma BDD...
    Bref, ce n'était pas aussi m......
    Merci beaucoup en tout cas pour ton temps et ta rapidité !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/02/2014, 15h26
  2. Probleme de liaison entre un formulaire et une base de données chez OVH
    Par Raphaelphp dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 29/11/2011, 12h22
  3. Réponses: 2
    Dernier message: 07/05/2010, 11h28
  4. liaison entre datagrid et une base de donnée
    Par yamyoung dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/05/2009, 22h51
  5. lien entre les tables d'une base de données Mysql
    Par chifa dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/10/2007, 12h42

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