Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La possibilité de trier des données en fonction de critères spécifiques, puis de présenter les données à un client via un contrôle d’interface utilisateur est un aspect important de la liaison de données. DataView fournit plusieurs façons de trier les données et de retourner des lignes de données classées par des critères de classement spécifiques. Outre ses fonctionnalités de tri basées sur des chaînes, DataView vous permet également d’utiliser des expressions Language-Integrated Query (LINQ) pour les critères de tri. Les expressions LINQ permettent d’effectuer des opérations de tri beaucoup plus complexes et puissantes que le tri basé sur des chaînes. Cette rubrique décrit les deux approches du tri à l'aide de DataView.
Création de DataView à partir d’une requête avec des informations de tri
Un DataView objet peut être créé à partir d’une requête LINQ to DataSet. Si cette requête contient une clause OrderBy, OrderByDescending, ThenBy, ou ThenByDescending, les expressions de ces clauses sont utilisées comme base pour trier les données avec DataView. Par exemple, si la requête contient les clauses Order By… et Then By…, le résultat DataView trierait les données par les deux colonnes spécifiées.
Le tri basé sur des expressions offre un tri plus puissant et plus complexe que le tri basé sur des chaînes plus simple. Notez que le tri basé sur des chaînes et des expressions s’exclue mutuellement. Si la chaîne Sort est définie après la création d’une DataView requête, le filtre basé sur l’expression déduit de la requête est effacé et ne peut pas être réinitialisé.
L’index d’un DataView est généré à la fois lors de la DataView création et quand l’une des informations de tri ou de filtrage est modifiée. Vous obtenez les meilleures performances en fournissant des critères de tri dans la requête LINQ to DataSet à partir de laquelle le DataView jeu de données est créé et non en modifiant les informations de tri, plus tard. Pour plus d’informations, consultez Performances de DataView.
Remarque
Dans la plupart des cas, les expressions utilisées pour le tri ne doivent pas avoir d’effets secondaires et doivent être déterministes. En outre, les expressions ne doivent pas contenir de logique qui dépend d’un nombre défini d’exécutions, car les opérations de tri peuvent être exécutées n’importe quel nombre de fois.
Exemple :
L’exemple suivant interroge la table SalesOrderHeader et classe les lignes retournées par la date de commande, crée un DataView à partir de cette requête et lie le DataView à un BindingSource.
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
orderby order.Field<DateTime>("OrderDate")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of DateTime)("OrderDate") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Exemple :
L’exemple suivant interroge la table SalesOrderHeader et ordonne les lignes retournées en fonction du montant total dû, crée un DataView à partir de cette requête, et lie le DataView à un BindingSource.
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query =
from order in orders.AsEnumerable()
orderby order.Field<decimal>("TotalDue")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of Decimal)("TotalDue") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Exemple :
L’exemple suivant interroge la table SalesOrderDetail et classe les lignes retournées par quantité de commande, puis par ID de commande ; crée une DataView sur la base de cette requête ; et associe le DataView à un BindingSource.
DataTable orders = _dataSet.Tables["SalesOrderDetail"];
EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
orderby order.Field<short>("OrderQty"), order.Field<int>("SalesOrderID")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of Int16)("OrderQty"), order.Field(Of Integer)("SalesOrderID") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Utilisation de la propriété de tri String-Based
La fonctionnalité de tri par chaînes de DataView fonctionne toujours avec LINQ to DataSet. Une fois qu'une requête DataView a été créée à partir d'une requête LINQ to DataSet, vous pouvez utiliser la propriété Sort pour définir le tri sur le DataView.
Les fonctionnalités de tri basées sur des chaînes et basées sur des expressions s’excluent mutuellement. La définition de la Sort propriété efface le tri basé sur l’expression hérité de la requête à partir de laquelle l’objet DataView a été créé.
Pour plus d’informations sur le filtrage basé sur Sort des chaînes, consultez Tri et Filtrage des données.
Exemple :
L’exemple suivant crée un élément à partir de la table des contacts et trie les lignes par nom de famille dans l’ordre décroissant, puis par prénom dans l’ordre croissant.
DataTable contacts = _dataSet.Tables["Contact"];
DataView view = contacts.AsDataView();
view.Sort = "LastName desc, FirstName asc";
bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim view As DataView = contacts.AsDataView()
view.Sort = "LastName desc, FirstName asc"
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()
Exemple :
L’exemple suivant interroge la table Contact pour les noms de famille commençant par la lettre « S ». A DataView est créé à partir de cette requête et lié à un BindingSource objet.
DataTable contacts = _dataSet.Tables["Contact"];
EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()
where contact.Field<string>("LastName").StartsWith("S")
select contact;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
view.Sort = "LastName desc, FirstName asc";
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim query = _
From contact In contacts.AsEnumerable() _
Where contact.Field(Of String)("LastName").StartsWith("S") _
Select contact
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = "LastName desc, FirstName asc"
Suppression du tri
Les informations de tri sur un DataView peuvent être effacées après avoir été établies à l’aide de la propriété Sort. Il existe deux façons d’effacer les informations de tri dans DataView:
Exemple :
Dans l'exemple suivant, un DataView est créé à partir d'une requête et le tri est effacé en définissant la propriété Sort sur une chaîne vide :
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
orderby order.Field<decimal>("TotalDue")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
view.Sort = "";
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of Decimal)("TotalDue") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = ""
Exemple :
L'exemple suivant crée une instance à partir de la table Contact et définit la propriété DataView pour trier par nom de famille dans l'ordre alphabétique inversé. Les informations de tri sont ensuite effacées en définissant la Sort propriété sur null:
DataTable contacts = _dataSet.Tables["Contact"];
DataView view = contacts.AsDataView();
view.Sort = "LastName desc";
bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
// Clear the sort.
view.Sort = null;
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim view As DataView = contacts.AsDataView()
view.Sort = "LastName desc"
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()
'Clear the sort.
view.Sort = Nothing