Overblog Suivre ce blog
Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

2 février 2014 7 02 /02 /février /2014 19:53

importexport

Il est possible d’importer/exporter des bases de données depuis SQL Server Management Studio .Les sources et destinations dépendent des providers installés .Contrairement à ce que l’on pourrait penser la source de données n’est pas limitée à SQL Server .

1 – Importer/Exporter une base de données  depuis SQL Server Management Studio

Dans l’explorateur d’objets > clic droit sur la base de données  > Tâches > Exporter les données

Un utilitaire se lance avec la possibilité de choisir la source de données et la destination .Il est possible de choisir les tables/vues, de modifier les mappages (changer le nom ou le type d’une colonne de la cible par exemple), il est également possible d’éditer le SQL.

Les problèmes rencontrés sont principalement liés à la correspondance des types de données

2- Générer un script de la base de données depuis SQL Server Management Studio

Dans l’explorateur d’objets > clic droit sur la base de données  > Tâches > Générer des scripts

Un utilitaire se lance avec la possibilité de choisir les tables, vues et procédures à générer.

Les problèmes qui peuvent se poser pour une migration avec le script sont :

  • Les types de données
  • Le nom des paramètres des procédures stockées (@nom pour Sql Server )
  • Le nom du propriétaire (dbo)
  • Instructions SQL
Repost 0
Published by Romagny13 - dans Divers
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:43

Ajouter un nouvel élément > Classe LINQ To SQL

  • Le fichier de configuration est mis à jour avec la chaine de connexion
  • Le designer permet de glisser les tables et procédures stockées depuis l’explorateur de serveurs

ltsql1.png

 

Diagramme de classes

      ltosql0  

 

DbDemoDataContext context = new DbDemoDataContext();

 

// Get All

var clients = context.Client;

// ou

Table<Client> clients = context.Client;

// procédure stockée

var clients = context.GetAllFromClient();

// ou

List<GetAllFromClientResult> clients = (context.GetAllFromClient()).ToList();

 

// Get One

Client client = context.Client.Where(c => c.Name.StartsWith("B")).FirstOrDefault();

 

// Insert

context.Client.InsertOnSubmit( new Client() { Name = "Oniri Léa", Email = "oniri136@msn.com", CategoryId = 1 });

            context.SubmitChanges();

// procédure stockée (nommée InsertClient)

context.InsertClient("Oniri Léa", "oniri136@msn.com", 1);

 

// Update

Client client = context.Client.Where(c => c.Name == "Bellin Marie").FirstOrDefault();

client.Email = "bellinmarienate@msn.com";

context.SubmitChanges();

// procédure stockée

context.UpdateClient(2, "Bellin Marie", "bellinmarie@live.com", 1);

 

// delete

Client client = context.Client.Where(c => c.Id == 21).FirstOrDefault();

context.Client.DeleteOnSubmit(client);

context.SubmitChanges();

// procédure stockée

context.DeleteClient(21);

 

ExecuteQuery et ExecuteCommand

// ExecuteQuery

var result = context.ExecuteQuery<Client>("Select * from Client where Name LIKE '%be%'");

 

// ExecuteCommand(pour requête insert/Update/delete)

int result = context.ExecuteCommand("Insert into Category(Name) values({0})","Nouvel inscrit");

 

Ressources

http://msdn.microsoft.com/fr-fr/data/cc936565

http://www.techheadbrothers.com/Articles.aspx/linq-360-degre-partie-4-page-1 

Repost 0
Published by Romagny13 - dans Linq To SQL
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:42
  

Chargement simple    

List<Client> clients = dbDemo.Clients.ToList();

 

SqlQuery    

var query = dbDemo.Clients.SqlQuery("Select * from [dbo].[Client] where [CategoryId] = 1");

// ou

List<Client> clients = (dbDemo.Clients.SqlQuery("Select * from [dbo].[Client] where [CategoryId] = 1")).ToList();

 

SaveChanges    

insertion    

dbDemo.Clients.Add(new Client() { Name = "Venturi Léa", Email = "ventl77@live.com", CategoryId = 1 });

int num = dbDemo.SaveChanges();

 

Modification    

var client = (from c in dbDemo.Clients

                        where c.Id == 2

                        select c).FirstOrDefault();

// ou

Client client = (from c in dbDemo.Clients

                        where c.Id == 2

                        select c).FirstOrDefault();

 

client.Email = "dupond133@yahoo.fr";

 

int num = dbDemo.SaveChanges();

 

Suppression    

Client client = (from c in dbDemo.Clients

                        where c.Id == 19

                        select c).FirstOrDefault();

 

dbDemo.Clients.Remove(client);

int num = dbDemo.SaveChanges();

 

 

http://www.entityframeworktutorial.net/EntityFramework4.3/Introduction.aspx    

How do i vidéos pour ADO.NET Entity Framework  

http://msdn.microsoft.com/en-us/vstudio/bb798022

Repost 0
Published by Romagny13 - dans Entity Framework
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:42

binding0.png

(Les méthodes GetClients() et GetCategories() retournent une liste générique)

        public MainWindow()

        {

            InitializeComponent();

 

            Clients = new CollectionViewSource() { Source = GetClients() };

            cboCategoryClient.ItemsSource = GetCategories();

 

            this.DataContext = Clients;

            this.View = (CollectionView)(CollectionViewSource.GetDefaultView(this.Clients.View));

        }

 

        public CollectionViewSource Clients { get; set; }

        private CollectionView View;

1-Navigation

IsSynchronizedWithCurrentItem="True"(du datagrid) permet de synchroniser avec l’item courant. Il est possible aussi de le gérer par code .

  private void btnFirst_Click(object sender, System.Windows.RoutedEventArgs e)

        {

            this.View.MoveCurrentToFirst();

        }

 

        private void btnPrevious_Click(object sender, System.Windows.RoutedEventArgs e)

        {

            if ((this.View.CurrentPosition > 0))

            {

                this.View.MoveCurrentToPrevious();

            }

        }

 

        private void btnNext_Click(object sender, System.Windows.RoutedEventArgs e)

        {

            if ((this.View.CurrentPosition < (this.View.Count - 1)))

            {

                this.View.MoveCurrentToNext();

            }

        }

 

        private void btnLast_Click(object sender, System.Windows.RoutedEventArgs e)

        {

            this.View.MoveCurrentToLast();

        }

 

        // Lorsqu'on sélectionne une ligne dans le datagrid, l'élément est affiché dans la vue détail

        private void dgClients_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            View.MoveCurrentTo(dgClients.SelectedItem);

        }

        // synchronise l'élément sélectionné dans le datagrid avec l'élément affiché dans la vue détail lors de la navigation

        void View_CurrentChanged(object sender, EventArgs e)

        {

            dgClients.SelectedItem = View.CurrentItem;

        }

2-Tri

private void btnSort_Click(object sender, RoutedEventArgs e)

        {

            //Clients.View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

            //ou

            View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

        }

3-Filtre

private void btnFilter_Click(object sender, RoutedEventArgs e)

        {

            // Clients.View.Filter = FilterClient;

            // Clients.View.Filter = new Predicate<object>(Client => ((Client)Client).Name.Contains("B"));

            // OU

            //View.Filter = FilterClient;

                View.Filter = new Predicate<object>(Client => ((Client)Client).Name.ToLower().Contains(txtFilter.Text.ToLower().Trim()));

 

        }       

        // Filtre

        private bool FilterClient(object item)

        {

            Client client = item as Client;

 

            return client.Name.Contains(txtFilter.Text);

        }

     

Xaml

<StackPanel>

        <StackPanel>

            <Label Name="lblId" Height="23" Content="{Binding Id}"/>

            <TextBox Name="txtName" Height="23" TextWrapping="Wrap" Text="{Binding Name}"/>

            <TextBox Name="txtEmail" Height="23" TextWrapping="Wrap"  Text="{Binding Email}"/>

            <ComboBox Height="20" Name="cboCategoryClient"

                      ItemsSource="{Binding}"

                      DisplayMemberPath="Name"

                      SelectedValuePath="Id"

                      SelectedValue="{Binding CategoryId}"

                      />

        </StackPanel>

        <StackPanel Orientation="Horizontal">

            <Button HorizontalAlignment="Left" Name="btnFirst" Width="36" Height="25" VerticalAlignment="Top" Click="btnFirst_Click">|&lt;</Button>

            <Button HorizontalAlignment="Left" Name="btnPrevious" Width="36" Height="25" VerticalAlignment="Top" Click="btnPrevious_Click">&lt;</Button>

            <Button HorizontalAlignment="Left" Name="btnNext"  Width="36" Height="25" VerticalAlignment="Top" Click="btnNext_Click">&gt;</Button>

            <Button HorizontalAlignment="Left"  Name="btnLast" Width="36" Height="25" VerticalAlignment="Top" Click="btnLast_Click">&gt;|</Button>

            <TextBox Name="txtFilter" Width="100"/>

            <Button Name="btnFilter" Content="Filtrer"  Click="btnFilter_Click"/>

            <Button x:Name="btnSort" Content="Trier"  Click="btnSort_Click" />                

        </StackPanel>

        <StackPanel>

            <DataGrid Name="dgClients" ItemsSource="{Binding}" SelectionChanged="dgClients_SelectionChanged" Height="208"/>

        </StackPanel>

    </StackPanel>

Repost 0
Published by Romagny13 - dans C
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:41

    wpfbind2-copie-1.png

  1. Créer un nouveau projet
  2. Ajouter un nouvel élémentADO.NET Entity Data Model (*.edmx)
  3. Sélectionner la base de données SQL Server (ou Modèle vide)
  4. Puis les tables et important les procédures stockées .C’est grâce à elles que les objets vont être créés dans le projet pour accéder à la base .

Des classes avec properties sont générées pour :

  • Chaque table
  • Chaque procédure stockée « Select »

 

Les méthodes se trouvent dans la classe « Entities » (définie après la sélection de la base de données) (fichier *.Context .cs)

Après c’est tout simple il suffit d’instancier un objet de la classe « Entities » pour utiliser les méthodes  

wpfbind3.png  

Exemple 2 WPF Forms /une form liste des clients /une form détail pour l’ajout et modification de clients  

MainWindow /Liste

  • SI l’ItemTemplate de la listBox n’est pas défini , la méthode ToString() est appelée pour afficher les objets
  • Je passe l’objet(un « client » ici) à modifier .

public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

 

            dbDemoEntities dbDemo = new dbDemoEntities();

            // GetAll / liste       

            ObjectResult<GetAllFromClient_Result> clients = dbDemo.GetAllFromClient();

            lstClients.ItemsSource = clients;

 

 

        }

 

        private dbDemoEntities dbDemo;

 

        private void lstClients_MouseDoubleClick(object sender, MouseButtonEventArgs e)

        {

            // on récupère le "client" sélectionné dans la listBox avec (GetAllFromClient_Result)lstClients.SelectedItem

            ClientDetailWindow clientDetailWindow = new ClientDetailWindow((GetAllFromClient_Result)lstClients.SelectedItem);

            clientDetailWindow.ShowDialog();

 

            GetClients();

        }

        private void GetClients()

        {

            ObjectResult<GetAllFromClient_Result> clients = dbDemo.GetAllFromClient();

            lstClients.ItemsSource = clients;

        }

 

        private void btnGetClient_Click(object sender, RoutedEventArgs e)

        {

            ClientDetailWindow clientDetailWindow = new ClientDetailWindow();

            clientDetailWindow.ShowDialog(); 

            GetClients();         

        }

 

        private void btnDeleteClient_Click(object sender, RoutedEventArgs e)

        {

            if (MessageBox.Show(string.Format("Voulez-vous supprimer ce client : {0} ? ", ((GetAllFromClient_Result)lstClients.SelectedItem).Name), "Supprimer un client", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK)

            {

                dbDemo.DeleteClient(((GetAllFromClient_Result)lstClients.SelectedItem).Id);

                GetClients();

            }

        }

     

    }

}

 

<Grid >

        <ListBox Name="lstClients" HorizontalAlignment="Left" Height="201" Margin="10,10,0,0" VerticalAlignment="Top" Width="482" MouseDoubleClick="lstClients_MouseDoubleClick" />

        <Button Name="btnGetClient" Content="Ajouter un client" HorizontalAlignment="Left" Margin="10,216,0,0" VerticalAlignment="Top" Width="128" Click="btnGetClient_Click"/>

        <Button x:Name="btnDeleteClient" Content="Supprimer le client" HorizontalAlignment="Left" Margin="143,216,0,0" VerticalAlignment="Top" Width="117" Click="btnDeleteClient_Click"/>

</Grid>

 

ClientDetailWindow/Détail

public partial class ClientDetailWindow : Window

    {

        public ClientDetailWindow()

        {

            InitializeComponent();

 

            this.Client = new GetAllFromClient_Result();

            Status = StatusQuery.Add;

 

            DataContext = Client;

            LoadCategories();

        }

 

        public ClientDetailWindow(GetAllFromClient_Result client)

        {

            InitializeComponent();

 

            this.Client = client;

            Status = StatusQuery.Update;

 

            DataContext = Client;

            LoadCategories();

        }

 

        public void LoadCategories()

        {

            ObjectResult<GetAllFromCategory_Result> AllCategories = AllCategories = dbDemo.GetAllFromCategory();

            cboCategoryClient.ItemsSource = AllCategories;

        }

 

        public GetAllFromClient_Result Client { get; set; }

        public StatusQuery Status { get; set; }

        private dbDemoEntities dbDemo = new dbDemoEntities();

 

        private void btnOk_Click(object sender, RoutedEventArgs e)

        {

 

            if (Status == StatusQuery.Add)

                // Insert

                dbDemo.InsertClient(Client.Name, Client.Email, Client.CategoryId);

            else

                // Update

                dbDemo.UpdateClient(Client.Id, Client.Name, Client.Email, Client.CategoryId);

 

            this.DialogResult = true;

        }

 

        private void btnCancel_Click(object sender, RoutedEventArgs e)

        {

           

        }

    }

 

    public enum StatusQuery

    {

        Add,

        Update

    }

 

<StackPanel>

        <Label Name="lblId" Height="23" Content="{Binding Id}"/>

        <TextBox Name="txtName" Height="23" TextWrapping="Wrap" Text="{Binding Name}"/>

        <TextBox Name="txtEmail" Height="23" TextWrapping="Wrap"  Text="{Binding Email}"/>

        <ComboBox Height="20" Name="cboCategoryClient"

                      ItemsSource="{Binding}"

                      DisplayMemberPath="Name"

                      SelectedValuePath="Id"

                      SelectedValue="{Binding CategoryId}"

                      />

 

        <StackPanel Orientation="Horizontal">

            <Button Name="btnOk" Content="Valider" Click="btnOk_Click"/>

            <Button Name="btnCancel" Content="Annuler" Click="btnCancel_Click"/>

        </StackPanel>

 

    </StackPanel>

 

Autre possibilité : utiliser LINQ

Exemple pour filtrer ou trier.

lstClients.ItemsSource = (from c in dbDemo.Client where c.CategoryId == 1 select c.Name).ToList();

Attention aux conversions (toujours très utile la méthode GetType()  pour savoir ce que l’on récupère)

 

Repost 0
Published by Romagny13 - dans Entity Framework
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:41

wpfbind1

3-Vue détail + ComboBox

Clients = new ObservableCollection<Client>(GetClients());

Categories = new ObservableCollection<Category>(GetCategories());

 

cboCategoryClient.ItemsSource = Categories;

 

DataContext = this;     

  
  •  On définit la propriété SelectedItem du datagrid (réglée sur le property SelectedClient ici) 
  •  On définit le  DataContext du conteneur de la vue détail
  • ItemsSource de la comboBox est définie dans le code behind, dans le Xaml on définit juste {Binding}  

<DataGrid x:Name="datagridClients" Height="150" ItemsSource="{Binding Clients}" SelectedItem="{Binding SelectedClient}" Grid.Row="0" AutoGenerateColumns="False" SelectionChanged="datagridClients_SelectionChanged">     

            <DataGrid.Columns>

                <DataGridTextColumn Header="Nom" Binding="{Binding Name}"/>

                <DataGridTextColumn Header="E-mail" Binding="{Binding Email}"/>

            </DataGrid.Columns>

        </DataGrid>

 

            <StackPanel DataContext="{Binding SelectedItem, ElementName=datagridClients}" Grid.Row="1">

            <TextBlock Height="20" Width="120" Name="txtClientId" Text="{Binding Path=Id}"/>

            <TextBox Height="20" Width="120" Name="txtClientName" Text="{Binding Name}"/>

            <TextBox Height="20" Width="120" Name="txtClientEmail" Text="{Binding Email}"/>

            <ComboBox Height="20" Name="cboCategoryClient"

                      ItemsSource="{Binding}"

                      DisplayMemberPath="Name"

                      SelectedValuePath="Id"

                      SelectedValue="{Binding CategoryId}"

                      />

        </StackPanel>

 

Variante :

Il est possible de définir en code

<ComboBox Height="20" Name="cboCategoryClient"/>

 

public MainWindow()

        {

            InitializeComponent();

 

            Clients = new ObservableCollection<Client>(GetClients());

            DataContext = this;

 

            Categories = new ObservableCollection<Category>(GetCategories());

            cboCategoryClient.ItemsSource = Categories;

            cboCategoryClient.DisplayMemberPath = "Name"; // valeur affichée

            cboCategoryClient.SelectedValuePath = "Id"; // valeur cachée(clé primaire de la table mère)

 

       public Client SelectedClient { get; set; }

 

        public ObservableCollection<Client> Clients

        {

            get;

            set;

        }

        public ObservableCollection<Category> Categories

        {

            get;

            set;

        }

 

On définit l’élément sélectionné dans l’event SelectionChanged du datagrid

private void datagridClients_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            cboCategoryClient.SelectedValue = SelectedClient.CategoryId;

        }

 

3 – Avec CollectionViewSource

L’ItemsSource du datagrid et de la comboBox se règlent sur la View de la collectionViewSource

   public MainWindow()

        {

            InitializeComponent();

         

            Clients = new CollectionViewSource() { Source = GetClients() };

            Categories = new CollectionViewSource() { Source = GetCategories() };

 

            cboCategoryClient.ItemsSource = Categories.View;

 

            DataContext = this;     

 

       

        }

 

        public Client SelectedClient { get; set; }

 

        public CollectionViewSource Clients

        {

            get;

            set;

        }

        public CollectionViewSource Categories

        {

            get;

            set;

        }

 

    <DataGrid x:Name="datagridClients" Height="150" ItemsSource="{Binding Clients.View}" SelectedItem="{Binding SelectedClient}" Grid.Row="0" AutoGenerateColumns="False" SelectionChanged="datagridClients_SelectionChanged">

            <DataGrid.Columns>

                <DataGridTextColumn Header="Nom" Binding="{Binding Name}"/>

                <DataGridTextColumn Header="E-mail" Binding="{Binding Email}"/>

            </DataGrid.Columns>

        </DataGrid>

        <StackPanel DataContext="{Binding SelectedItem, ElementName=datagridClients}" Grid.Row="1">

            <TextBlock Height="20" Width="120" Name="txtClientId" Text="{Binding Id}"/>

            <TextBox Height="20" Width="120" Name="txtClientName" Text="{Binding Name}"/>

            <TextBox Height="20" Width="120" Name="txtClientEmail" Text="{Binding Email}"/>

 

            <!--<ComboBox Height="20" Name="cboCategoryClient"/>-->

            <ComboBox Height="20" Name="cboCategoryClient"

                      ItemsSource="{Binding}"

                      DisplayMemberPath="Name"

                      SelectedValuePath="Id"

                      SelectedValue="{Binding CategoryId}"

                      />

        </StackPanel>

 

 

Repost 0
Published by Romagny13 - dans C
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:40

1-Personnaliser le datagrid

  • Propriété AutoGenerateColumns= « False » du datagrid
  • On définit les DataGrid.Columns et le binding

<DataGrid x:Name="datagridClients" Height="150" ItemsSource="{Binding Clients}" Grid.Row="0" AutoGenerateColumns="False">     

            <DataGrid.Columns>

                <DataGridTextColumn Header="Nom" Binding="{Binding Name}"/>

                <DataGridTextColumn Header="E-mail" Binding="{Binding Email}"/>

            </DataGrid.Columns>

        </DataGrid>

ObservableCollection<T>

Clients = new ObservableCollection<Client>(GetClients());

DataContext = this;

On utilise un property dans le code behind

  public ObservableCollection<Client> Clients

        {

            get;

            set;

        }

 

2-Datagrid/ComboBox

Avec un DataTemplate et une comboBox :

  • ItemsSource on charge les données du property Categories
  • DisplayMemberPath membre à afficher de la source de données
  • SelectedValuePath : équivalent à la clé primaire de la table mère
  • SelectedValue : équivalent à la clé étrangère

En gros on affiche la liste des catégories et on sélectionne la catégorie du client (correspondante à sa clé étrangère  qui est de type int)

   <DataGrid x:Name="datagridClients" Height="150" ItemsSource="{Binding Clients}"  SelectedItem="{Binding SelectedClient}" Grid.Row="0" AutoGenerateColumns="False" SelectionChanged="datagridClients_SelectionChanged">

            <DataGrid.Columns>

                <DataGridTextColumn Header="Nom" Binding="{Binding Name}"/>

                <DataGridTextColumn Header="E-mail" Binding="{Binding Email}"/>

 

                <DataGridTemplateColumn Header="Catégorie">

                    <DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <ComboBox

                                        ItemsSource="{Binding Categories, RelativeSource={RelativeSource AncestorType=Window}}"

                                        DisplayMemberPath="Name" SelectedValuePath="Id" 

                                        SelectedValue="{Binding CategoryId,UpdateSourceTrigger=PropertyChanged}" />

                        </DataTemplate>

                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>

            </DataGrid.Columns>    

        </DataGrid>

GetClients() et GetCategories sont des méthodes renvoyant des listes génériques

        public MainWindow()

        {

            InitializeComponent();

 

            Clients = new ObservableCollection<Client>(GetClients());

            Categories = new ObservableCollection<Category>(GetCategories());

 

            DataContext = this;

        }

          public Client SelectedClient { get; set; }

 

          public ObservableCollection<Client> Clients { get; set; }

 

     

Repost 0
Published by Romagny13 - dans C
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:40

V-SelectedItem

  • Liste

<StackPanel>

            <DataGrid x:Name="datagridClients" Height="120" ItemsSource="{Binding Clients}" />

            <Grid DataContext="{Binding SelectedItem, ElementName=datagridClients}">

                <TextBox Height="30" Name="txtClientName" Text="{Binding Name}"/>

            </Grid>

        </StackPanel>

 

   public MainWindow()

        {

            InitializeComponent();

 

            Clients = GetClients();

            DataContext = this;

        }

        public List<Client> Clients

        {

            get;

            set;

        }

  • ObservableCollection<T>

   public MainWindow()

        {

            InitializeComponent();

  

            Clients = new ObservableCollection<Client>(GetClients());

            DataContext = this;

        }

        public ObservableCollection<Client> Clients

        {

            get;

            set;

        }

(le code Xaml ne change pas)

  • CollectionViewSource

        public MainWindow()

        {

            InitializeComponent();

 

            Clients = new CollectionViewSource() { Source = GetClients() };

            DataContext = this;

        }

 

        public CollectionViewSource Clients

        {

            get;

                  set;

        }

 

<StackPanel>

            <DataGrid x:Name="datagridClients" Height="120" ItemsSource="{Binding Clients.View}" />

 

            <Grid DataContext="{Binding SelectedItem, ElementName=datagridClients}">

                <TextBox Height="30" Name="txtClientName" Text="{Binding Name}"/>

            </Grid>

        </StackPanel>

 

  • Avec ClientsViewModel

CollectionViewSource Clients = new CollectionViewSource() { Source = GetClients() };

DataContext = new ClientsViewModel(Clients);

(Code Xaml identique à celui juste au dessus)

Ressources          

 http://code.msdn.microsoft.com/windowsdesktop/WPF-MasterDetail-edit-form-3611db77

http://msdn.microsoft.com/fr-fr/library/windows/apps/hh758283.aspx

http://msdn.microsoft.com/fr-fr/library/windows/apps/hh464965.aspx

http://archive.msdn.microsoft.com/wpfdatavideos/Release/ProjectReleases.aspx?ReleaseId=1234

 

 

Repost 0
Published by Romagny13 - dans C
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:40

III-Binding sur property dans le code – behind  de la page

1-ObservableCollection<T>

            // Avec une liste générique

            Clients = new ObservableCollection<Client>(GetClients());

            // Avec DataTable

            Clients = new ObservableCollection<Client>();

            foreach (DataRow row in GetClientsTable().Rows)

                Clients.Add(new Client(Convert.ToInt32(row["Id"]), Convert.ToString(row["Name"]), Convert.ToString(row["Email"]), Convert.ToInt32(row["CategoryId"])));

 

            DataContext = this.Clients;

 

Le property

    public ObservableCollection<Client> Clients

        {

            get;

            private set;

        }

 

CollectionViewSource

// Liste

Clients = new CollectionViewSource { Source = GetClients() };

// DataTable

Clients = new CollectionViewSource { Source = GetClientsTable() };   

DataContext = this.Clients;

 

<DataGrid Name="datagridClients" Height="120" ItemsSource="{Binding}"/>

 

Le Property

public CollectionViewSource Clients

        {

            get;

            private set;

        }

 

IV – Avec un ViewModel

ClientsViewModel

  public class ClientsViewModel

    {

        public ObservableCollection<Client> Clients

        {

            get;

            private set;

        }

 

        public ClientsViewModel(ObservableCollection<Client> clients)

        {

            this.Clients = clients;

        }

}

 

MainForm

DataContext =new ClientsViewModel(new ObservableCollection<Client>(GetClients()));

 

<DataGrid Name="datagridClients" Height="120" ItemsSource="{Binding Clients}"/>

 

 2 -CollectionViewSource  

ClientsViewModel

  public class ClientsViewModel

    {

 

        public ICollectionView Clients

        {

            get;

            private set;

        }

 

        public ClientsViewModel(ICollectionView clients)

        {

            this.Clients = clients;

        }

}

MainForm

var clients = new CollectionViewSource() { Source = GetClients() }.View;

DataContext = new ClientsViewModel(clients);

ItemsSource pointe sur le property Clients de ClientsViewModel

<DataGrid Name="datagridClients" Height="120" ItemsSource="{Binding Clients}"/>

 

OU variante

ClientsViewModel

public class ClientsViewModel

    {

        public CollectionViewSource Clients

        {

            get;

            private set;

        }

 

        public ClientsViewModel(CollectionViewSource clients)

        {

            this.Clients = clients;

        }

}

 

MainForm

CollectionViewSource clients = new CollectionViewSource() { Source = GetClients() };

DataContext = new ClientsViewModel(clients);

 

<DataGrid Name="datagridClients" Height="120" ItemsSource="{Binding Clients.View}"/>

 

Repost 0
Published by Romagny13 - dans C
commenter cet article
2 février 2014 7 02 /02 /février /2014 01:39

I–Liste générique

1-ItemsSource

datagridClients.ItemsSource = GetClients();

 

<DataGrid Name="datagridClients" Height="120"/>

 

La méthode appelée est quelconque et renvoie une List<Client> , cela pourrait être une méthode d’une classe DAO

public MainWindow()

        {

            InitializeComponent();

 

            // List<Client>

            datagridClients.ItemsSource = GetClients();

 

        }

        public List<Client> GetClients()

        {

            SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=dbDemo;Integrated Security=SSPI;");

 

            List<Client> clients = new List<Client>();

 

            using (SqlCommand command = new SqlCommand("Select * from [Client]", connection))

            {

                try

                {

                    connection.Open();

 

                    using (SqlDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            Client client = new Client();

                            client.Id = Convert.ToInt32(reader["Id"]);

                            client.Name = Convert.ToString(reader["Name"]);

                            client.Email = Convert.ToString(reader["Email"]);

                            client.CategoryId = Convert.ToInt32(reader["CategoryId"]);

 

                            clients.Add(client);

                        }

                    }

                }

                catch(Exception ex)

                {

                    throw ex;

                }

                finally

                {

                    connection.Close();

                }

            }

 

            return clients;

        }

 

2-Avec DataContext

  datagridClients.DataContext = GetClients();

 

Dans le Xaml il faut spécifier ItemsSource sinon le datagrid n’affiche rien

  <DataGrid Name="datagridClients" Height="120" ItemsSource="{Binding}"/>

 

Astuces :

  • Convertir la liste en ObservableCollection

  datagridClients.DataContext  = new ObservableCollection<Client>(GetClients());

 

  • convertir la liste en CollectionViewSource

CollectionViewSource clientsView = new CollectionViewSource { Source = GetClients() };

datagridClients.DataContext = clientsView;

//ou plus rapide

datagridClients.DataContext = new CollectionViewSource { Source = GetClients() };

 

 

II-DataTable/DataSet

1-ItemsSource

datagridClients.ItemsSource = GetClientsTable().AsDataView();

 

<DataGrid Name="datagridClients" Height="120"/>

 

 

public MainWindow()

        {

            InitializeComponent();

 

            // DataTable

            datagridClients.ItemsSource = GetClientsTable().AsDataView();

        }

        public DataTable GetClientsTable()

        {

            SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=dbDemo;Integrated Security=SSPI;");

 

            DataTable tableClient = new DataTable();

            SqlDataAdapter adpater = new SqlDataAdapter("Select * from Client", connection);                         

                 adpater.Fill(tableClient);                                        

            return tableClient;

        }

    }

 

2-DataContext

datagridClients.DataContext = GetClientsTable();

 

<DataGrid Name="datagridClients" Height="120" ItemsSource="{Binding}"/>

 

Astuces :

  • Conversion de la DataTable en ObservableCollection, demande un peu de code

ObservableCollection<Client> obsClients = new ObservableCollection<Client>();

      foreach (DataRow row in GetClientsTable().Rows)

             obsClients.Add(new Client(Convert.ToInt32(row["Id"]), Convert.ToString(row["Name"]), Convert.ToString(row["Email"]), Convert.ToInt32(row["CategoryId"])));

 

datagridClients.DataContext = obsClients;

 

  • Convertir la DataTable en CollectionViewSource

CollectionViewSource clientsView = new CollectionViewSource { Source = GetClientsTable() };

datagridClients.DataContext = clientsView;

 

Repost 0
Published by Romagny13 - dans C
commenter cet article