Partage
  • Partager sur Facebook
  • Partager sur Twitter

afficher les données d'une table dans des objet sur une fen

    29 juin 2011 à 20:28:48

    salut a tous les amis du zero. j'ai un peti souci que j'aimerais que vous m'aidiez a le resoudre.
    j'ai commence une application en C# ,ma base de données est sous SQL SERVEUR 2008.j'arrive facilement a ecrire dans ma base de données, mais ma difficulte est que je ne sais pas comment faire ressortir les données de ma base pour les afficher sur des objets (textbox, combobox ...) situer sur ma fenetre enfin de faire des modif et mettre ma base a jour.
    SVP aide moi car je suis un zero en C#.
    NB: je dessine mes fenetre avec WPF (xaml).
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      29 juin 2011 à 21:27:10

      Enfin un qui fait du WPF et du C#, ça fait plaisir :)

      Je pense que t'as intérêt à utiliser les Bindings.

      Crée une classe "conteneur" qui contient toutes les propriétés dont tu as besoin :
      public class MyClass
      {
          public string SomeString {get; set;}
          public int SomeNumber {get; set;}
          // ...
      }
      


      Implémente INotifyPropertyChanged dans ta MainWindow :
      public partial class MainWindow : Window, INotifyPropertyChanged
      {
          // ...
          public event PropertyChangedEventHandler PropertyChanged;
          private void FirePropertyChanged( string propertyName )
          {
              if( this.PropertyChanged != null )
              {
                  this.PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
              }
          }
          // ...
      }
      


      Crée une ObservableCollection de ta classe, qui utilise INotifyPropertyChanged :
      private ObservableCollection<MyClass> _items;
      public ObservableCollection<MyClass> Items
      {
          get { return this._items; }
          set
          {
              this._items = value;
              FirePropertyChanged( "Items" );
          }
      }
      


      Explication : L'ObservableCollection est une sorte de List, qui implémente INotifyPropertyChanged en interne ; autrement dit, quand un objet est ajouté, enlevé ou modifié, si il y a un Binding sur ta collection, ça le met à jour.
      L'utilisation d'INotifyPropertyChanged permet de faire ça :
      this.Items = someCollection;
      

      sans avoir à te soucier de ta GUI qui se mettra toute seule à jour.

      Ensuite, crée une DataTemplate. Tu peux y mettre ce que tu veux, en utilisant des Bindings sur les propriétés de ta classe :
      <Window.Resources>
        <DataTemplate x:Key="MyTemplate">
          <TextBlock Text="{Binding SomeNumber}" />
          <TextBox Text="{Binding SomeString, Mode=TwoWay}" />
          <!-- ... -->
        </DataTemplate>
      </Window.Resources>
      


      Si tu veux référencer l'instance de la classe, utilise simplement {Binding} sans rien d'autre.

      Ensuite, crée un contrôle comme une ListBox, un ItemsControl (qui ne possède pas de sélection) ou une ListView, et défini son ItemsSource et son ItemTemplate à, respectivement, ton ObservableCollection et ta DataTemplate :
      <ListBox ItemsSource="{Binding Items}"
               ItemTemplate="{StaticResource MyTemplate}" />
      


      Enfin, pour que le Binding sur Items marche, il te faut définir le DataContext de ta MainWindow (l'endroit où le moteur de bindings va chercher les propriétés, en quelque sorte) à elle-même dans le constructeur :
      public MainWindow()
      {
          this.DataContext = this;
          InitializeComponent();
          
          // ...
      }
      


      Explication : Comme ta ListBox est bindée à ton ObservableCollection, tous les objets sont dedans.
      Grâce à la DataTemplate, ils apparaissent de la façon que tu veux.
      Du coup, tu n'as pas besoin de te préoccuper de ta ListBox, puisque ses objets sont déjà dans le code.


      Après ça il te reste à charger les objets contenus dans ta base de données dans l'ObservableCollection, et ils seront montrés.

      PS : Peut-être t'es-tu demandé ce que signifiait le "Mode=TwoWay" dans un des Bindings que j'ai mis en exemple. Cela veut dire "si l'élément est changé dans l'interface, le changer dans la collection aussi". Pratique avec une TextBox par exemple.
      Avec des Bindings, tu peux facilement faire des trucs comme ça :
      Image utilisateur
      Dans cet exemple, il y a une ListBox bindée à une ObservableCollection. Je n'ai pas utilisé de DataTemplate (pas d'exemple avec ça sous la main, désolé), mais des Bindings sur le SelectedItem de la ListBox. Du coup, quand je change le texte dans une des TextBox, l'objet est automatiquement mis à jour.
      Beaucoup plus pratique que de devoir tout faire à la main ;)
      • Partager sur Facebook
      • Partager sur Twitter

      afficher les données d'une table dans des objet sur une fen

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown