Page d'Accueil

Les Tableaux d'un Ensemble de données

 

Introduction

Les tableaux qui appartiennent à un objet DataSet sont stockés dans une propriété appelée Tables. La propriété DataSet.Tables est un objet de type DataTableCollection. Le DataTableCollection est une classe qui fournit tout ce que vous devez ajouter, placer, ou contrôler dans n'importe quelle tableau qui appartient à un objet DataSet.

 

Accéder  à un Tableau dans la collection

La classe DataTableCollection applique la méthode GetEnumerator () de l'interface IEnumerable. Ceci vous permet d'utiliser une boucle foreach pour visiter chaque tableau membre de la collection. Une fois que vous avez atteint un tableau dans la collection, vous pouvez accéder à n'importe laquelle de ses propriétés ou méthodes publiques. Voici un exemple d'applicqtion de foreach sur une collection de tableaux d'un ensemble de données pour énumérer leurs noms :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblActors;
    public DataTable tblFormats;
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add("Ratings");

        tblActors = dsVideoCollection.Tables.Add("Actors");
        tblFormats = dsVideoCollection.Tables.Add("Formats");
    }

    public void ShowTables()
    {
        DataTableCollection tables = this.dsVideoCollection.Tables;

        foreach (DataTable tbl in tables)
            Console.WriteLine("Table Name: {0}", tbl.TableName);
    }
}

public static class Program
{
    static int Main(string[] args)
    {
        VideoCollection coll = new VideoCollection();

        coll.ShowTables();
        Console.WriteLine();
        return 0;
    }
}

Ceci produirait :

Table Name: Directors
Table Name: Categories
Table Name: Ratings
Table Name: Actors
Table Name: Formats

Press any key to continue . . .

Vous pouvez utiliser cette approche pour identifier un tableau et puis effectuer une opération désirée dessus.

Ajouter un nouveau Tableau à une collection

En utilisant la propriété DataSet.Tables, pour ajouter un tableau créé à un objet DataSet, appelez une des méthodes Add () de la classe DataTableCollection. La première version de cette méthode a la syntaxe suivante :

public virtual DataTable Add();

Cette méthode peut être utilisée pour ajouter un nouveau tableau qui utilise le nom par défaut. Voici un exemple :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        tblVideoCategories = new DataTable("Categories");

        tblRatings = dsVideoCollection.Tables.Add();
    }
}

Si c'est le premier tableau ajouté à la collection, il serait nommé Tableau1. La deuxième version de la méthode DataTableCollection.Add () utilise la syntaxe suivante :

public virtual void Add(DataTable table);

Cette version vous permet d'ajouter un objet DataTable prédéfini ou déclaré. Voici un exemple :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add();
    }
}

Cette deuxième version de la méthode exige que vous créez d'abord un objet DataTable et le tableau a probablement un nom. Alternativement, si vous voulez ajouter un tableau en utilisant son nom formel, vous pouvez utiliser la troisième version de cette méthode. Sa syntaxe est :

public virtual DataTable Add(string name);

Cette version fonctionne comme la première sauf que, au lieu du nom par défaut (tel que Tableau1, Tableau2, etc.), elle vous laisse indiquer le nom désiré du nouveau tableau. Voici les exemples :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblActors;
    public DataTable tblFormats;
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add();

        tblActors = dsVideoCollection.Tables.Add("Actors");
        tblFormats = dsVideoCollection.Tables.Add("Formats");
    }
}

Créer une gamme (Range) des Tableaux

Au lieu d'ajouter un tableau à la fois, vous pouvez créer une liste de tableaux et puis l'ajouter à la collection DataSet.Tables. Pour soutenir cette opération, le DataTableCollection est équipé de la méthode AddRange (). Sa syntaxe est :

public void AddRange(DataTable[] tables);

Cette méthode s'attend à un choix d'objets DataTable comme argument. Voici un exemple :

using System;
using System.Data;

public class BookCollection
{
    private void Create()
    {
        DataSet dsBooks = new DataSet("Book");

        DataTable dtCategories = new DataTable("Categorie");
        DataTable dtAuthors = new DataTable("Author");
        DataTable dtPublishers = new DataTable("Publisher");
        DataTable dtBooks = new DataTable("Book");

        DataTable[] colTables = { dtCategories, dtAuthors, dtPublishers, dtBooks };
        dsBooks.Tables.AddRange(colTables);
    }
}

Étude pratique Étude pratique : Créer des Tableaux

  • Pour créer des tableaux, changex le fichier comme suit :
     
    using System;
    using System.Data;
    
    namespace VideoCollection1
    {
        public class Video
        {
            public DataSet dsVideoCollection;
    
            public DataTable tblVideoCategories;
            public DataTable tblDirectors;
            public DataTable tblRatings;
            public DataTable tblActors;
            public DataTable tblFormats;
    
            public Video()
            {
                dsVideoCollection = new DataSet("Videos");
    
                tblDirectors = new DataTable();
                tblDirectors.TableName = "Directors";
                dsVideoCollection.Tables.Add(tblDirectors);
    
                tblVideoCategories = new DataTable("Categories");
                dsVideoCollection.Tables.Add(tblVideoCategories);
    
                tblRatings = dsVideoCollection.Tables.Add("Ratings");
    
                tblActors = dsVideoCollection.Tables.Add("Actors");
                tblFormats = dsVideoCollection.Tables.Add("Formats");
            }
        }
    }

Localiser un Tableau dans une collection

Après avoir créé les tableaux qui font partie d'une application, avant d'effectuer n'importe quelle opération sur un tableau, vous devez d'abord recouvrer sa référence. Ceci peut être fait en localisant le tableau particulier désirée dans la collection.

Pour localiser un tableau dans la collection DataSet.Tables, la classe DataTableCollection est équipée de la propriété Item dans deux versions. Pour localiser un tableau en utilisant son nom, utilisez la version suivante de cette propriété :

public DataTable this[string name] {get;}

Pour utiliser cette propriété, écrivez le nom de l'objet du tableau dans les crochets de la propriété DataTableCollection []. Voici un exemple :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblActors;
    public DataTable tblFormats;
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add();

        tblActors = dsVideoCollection.Tables.Add("Actors");
        tblFormats = dsVideoCollection.Tables.Add("Formats");
    }
}

public static class Program
{
    static int Main(string[] args)
    {
        VideoCollection coll = new VideoCollection();

        DataTable tbl = coll.dsVideoCollection.Tables["Directors"];

        Console.WriteLine("Table Name: {0}", tbl.TableName);
        return 0;
    }
}

Ceci produirait :

Table Name: Directors
Press any key to continue . . .

Au lieu de localiser un tableau par son nom, vous pouvez utiliser son index de la collection. Pour ce faire, vous pouvez utiliser la deuxième version de la propriété DataTableCollection []. Sa syntaxe est :

public DataTable this[int index] {get;}

Cette propriété attend comme argument l'index du tableau dans la collection DataSet.Tables. Voici un exemple :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblActors;
    public DataTable tblFormats;
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add();

        tblActors = dsVideoCollection.Tables.Add("Actors");
        tblFormats = dsVideoCollection.Tables.Add("Formats");
    }
}

public static class Program
{
    static int Main(string[] args)
    {
        VideoCollection coll = new VideoCollection();

        DataTable tbl = coll.dsVideoCollection.Tables[3];

        Console.WriteLine("Table Name: {0}", tbl.TableName);
        return 0;
    }
}

Ceci produirait :

Table Name: Actors
Press any key to continue . . .

Si vous fournissez un index au dessous ou au delà du nombre des tableaux dans l'ensemble de données, le compilateur rejetterait une exception IndexOutOfRangeException. Pour éviter ceci, vous pouvez demander l'index du tableau. Pour ce faire, appeler la méthode DataTableCollection.IndexOf (). Elle est prise en charge dans deux versions. Une des versions prend comme argument le nom de la variable du tableau. La syntaxe de cette méthode est :

public virtual int IndexOf(DataTable table);

Voici un exemple d'appel de cette méthode :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblActors;
    public DataTable tblFormats;
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add();

        tblActors = dsVideoCollection.Tables.Add("Actors");
        tblFormats = dsVideoCollection.Tables.Add("Formats");
    }

    public void LocateTable()
    {
        int index = dsVideoCollection.Tables.IndexOf(tblActors);
        Console.WriteLine("Table Index: {0}", index.ToString());
    }
}

public static class Program
{
    static int Main(string[] args)
    {
        VideoCollection coll = new VideoCollection();

        coll.LocateTable();
        return 0;
    }
}

Ceci produirait :

Table Index: 3
Press any key to continue . . .

Au lieu d'utiliser le nom de la variable du tableau, vous pouvez la localiser en utilisant son nom formel. Pour ce faire, appeler la version suivante de la méthode IndexOf () :

public virtual int IndexOf(string tableName);

Quand les tableaux d'un DataSet ont été créés, vous pouvez obtenir leur liste comme rangée en utilisant la propriété DataTableCollection.List. Cette propriété renvoie un type de liste ArrayList .

Au lieu de localiser directement un tableau, vous pouvez être intéressés de savoir si un tableau particulier existe dans la collection DataSet.Tables. Pour vérifier ceci, vous pouvez appeler la méthode DataTableCollection.Contains (). Sa syntaxe est :

public bool Contains(string name);

Cette méthode s'attend au nom d'objet d'un tableau comme argument. Si le tableau existe dans la collection, cette méthode revoie vrai. Voici un exemple :

using System;
using System.Data;

public class VideoCollection
{
    public DataTable tblActors;
    public DataTable tblFormats;
    public DataTable tblRatings;
    public DataTable tblDirectors;
    public DataTable tblVideoCategories;
    public DataSet   dsVideoCollection;

    public VideoCollection()
    {
        dsVideoCollection = new DataSet("Videos");

        tblDirectors = new DataTable();
        tblDirectors.TableName = "Directors";
        dsVideoCollection.Tables.Add(tblDirectors);

        tblVideoCategories = new DataTable("Categories");
        dsVideoCollection.Tables.Add(tblVideoCategories);

        tblRatings = dsVideoCollection.Tables.Add();

        tblActors = dsVideoCollection.Tables.Add("Actors");
        tblFormats = dsVideoCollection.Tables.Add("Formats");
    }
}

public static class Program
{
    static int Main(string[] args)
    {
        VideoCollection coll = new VideoCollection();

        if( coll.dsVideoCollection.Tables.Contains("Actors") )
            Console.WriteLine("The Actors table exists");
        else
            Console.WriteLine("The Actors table does not exist");

        Console.WriteLine();

        if (coll.dsVideoCollection.Tables.Contains("VideoTypes"))
            Console.WriteLine("The VideoTypes table exists");
        else
            Console.WriteLine("The VideoTypes table does not exist");

        Console.WriteLine();
        return 0;
    }
}

Ceci produirait :

The Actors table exists

The VideoTypes table does not exist

Press any key to continue . . .

Étude pratique Étude pratique : Montrer les Tableaux

  1. Pour montrer une liste des tableaux dans l'objet DataSet, changez le fichier Video.cs comme suit :
     
    using System;
    using System.Data;
    
    namespace VideoCollection1
    {
        public class Video
        {
            public DataSet dsVideoCollection;
    
            public DataTable tblVideoCategories;
            public DataTable tblDirectors;
            public DataTable tblRatings;
            public DataTable tblActors;
            public DataTable tblFormats;
    
            public Video()
            {
                dsVideoCollection = new DataSet("Videos");
    
                tblDirectors = new DataTable();
                tblDirectors.TableName = "Directors";
                dsVideoCollection.Tables.Add(tblDirectors);
    
                tblVideoCategories = new DataTable("Categories");
                dsVideoCollection.Tables.Add(tblVideoCategories);
    
                tblRatings = dsVideoCollection.Tables.Add("Ratings");
    
                tblActors = dsVideoCollection.Tables.Add("Actors");
                tblFormats = dsVideoCollection.Tables.Add("Formats");
            }
    
            public void ShowTables()
            {
                int i = 1;
    
                Console.WriteLine("Video Collection - Tables");
                foreach (DataTable tbl in dsVideoCollection.Tables)
                    Console.WriteLine("{0}. {1}", i++, tbl.TableName);
            }
        }
    }
  2. Accédez au fichier Program.cs et changez le comme suit :
     
    using System;
    
    namespace VideoCollection1
    {
        class Program
        {
            static int Main(string[] args)
            {
                Video vdo = new Video();
    
                vdo.ShowTables();
                Console.WriteLine();
    
                return 0;
            }
        }
    }
  3. Exécutez l'application :
     
    Video Collection - Tables
    1. Directors
    2. Categories
    3. Ratings
    4. Actors
    5. Formats
    
    Press any key to continue . . .
  4. Fermez la fenêtre DOS
  

Précédent Copyright © 2007, Yevol Suivant