Creazione di un oggetto DataView (LINQ to DataSet)Creating a DataView Object (LINQ to DataSet)

Per creare un oggetto DataView nel contesto LINQ to DataSetLINQ to DataSet, sono disponibili due modalità.There are two ways to create a DataView in the LINQ to DataSetLINQ to DataSet context. È possibile creare un oggetto DataView da una query LINQ to DataSetLINQ to DataSet su DataTable oppure da un oggetto DataTable tipizzato o non tipizzato.You can create a DataView from a LINQ to DataSetLINQ to DataSet query over a DataTable, or you can create it from a typed or un-typed DataTable. In entrambi i casi, si crea il DataView utilizzando uno del AsDataView metodi di estensione. DataView non è possibile costruire direttamente nel LINQ to DataSetLINQ to DataSet contesto.In both cases, you create the DataView by using one of the AsDataView extension methods; DataView is not directly constructible in the LINQ to DataSetLINQ to DataSet context.

Dopo aver creato DataView, è possibile associarlo a un controllo dell'interfaccia utente in un'applicazione Windows Form o ASP.NET oppure modificare le impostazioni di filtro e ordinamento.After the DataView has been created, you can bind it to a UI control in a Windows forms application or an ASP.NET application, or change the filtering and sorting settings.

DataView costruisce un indice, offrendo un significativo incremento delle prestazioni nel caso di operazioni in cui è possibile usare l'indice, ad esempio ordinamento e filtro.DataView constructs an index, which significantly increases the performance of operations that can use the index, such as filtering and sorting. L'indice relativo a un oggetto DataView viene compilato sia quando si crea DataView che quando si modifica una qualsiasi delle informazioni relative all'ordinamento o al filtraggio.The index for a DataView is built both when the DataView is created and when any of the sorting or filtering information is modified. Se si crea un oggetto DataView e quindi si impostano le impostazioni sull'ordinamento o il filtraggio in un secondo momento, l'indice verrà compilato almeno due volte, ovvero una volta durante la creazione di DataView e una seconda volta quando viene modificata una qualsiasi delle proprietà di ordinamento o filtro.Creating a DataView and then setting the sorting or filtering information later causes the index to be built at least twice: once when the DataView is created, and again when any of the sort or filter properties are modified.

Per ulteriori informazioni sul filtro e ordinamento con DataView, vedere filtro con DataView e ordinamento con DataView.For more information about filtering and sorting with DataView, see Filtering with DataView and Sorting with DataView.

Creazione di una DataView da una query LINQ to DataSetCreating DataView from a LINQ to DataSet Query

Un oggetto DataView può essere creato dai risultati di una query LINQ to DataSetLINQ to DataSet, in cui i risultati sono una proiezione di oggetti DataRow.A DataView object can be created from the results of a LINQ to DataSetLINQ to DataSet query, where the results are a projection of DataRow objects. Il nuovo oggetto DataView eredita le informazioni di filtro e ordinamento della query da cui è stato creato.The newly created DataView inherits the filtering and sorting information from the query it is created from.

Nota

Nella maggior parte dei casi le espressioni usate per il filtro e l'ordinamento non devono presentare effetti collaterali e devono essere deterministiche.In most cases, the expressions used for filtering and sorting should not have side effects and must be deterministic. Le espressioni non devono inoltre contenere eventuale codice che dipende da un numero impostato di esecuzioni perché è possibile che le operazioni di ordinamento e filtro vengano eseguite un numero qualsiasi di volte.Also, the expressions should not contain any logic that depend on a set number of executions, as the sorting and filtering operations may be executed any number of times.

La creazione di DataView da una query che restituisce tipi anonimi o da query che eseguono operazioni join non è supportata.Creating a DataView from a query that returns anonymous types or queries that perform join operations is not supported.

In una query usata per creare DataView sono supportati solo i seguenti operatori di query:Only the following query operators are supported in a query used to create DataView:

Si noti che quando viene creato un oggetto DataView da una query LINQ to DataSetLINQ to DataSet, il metodo Select deve essere il metodo finale chiamato nella query,Note that when a DataView is created from a LINQ to DataSetLINQ to DataSet query the Select method must be the final method called in the query. Come illustrato nell'esempio seguente, che consente di creare un DataView di ordini online ordinati in base al totale dovuto:This is shown in the following example, which creates a DataView of online orders sorted by total due:

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<bool>("OnlineOrderFlag") == true
    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() _
    Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
    Order By order.Field(Of Decimal)("TotalDue") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

È inoltre possibile utilizzare una stringa basata sul RowFilter e Sort proprietà da filtrare e ordinare un DataView dopo che è stato creato da una query.You can also use the string-based RowFilter and Sort properties to filter and sort a DataView after it has been created from a query. Si noti che in questo caso le informazioni di ordinamento e di filtro ereditate dalla query verranno cancellate.Note that this will clear the sorting and filtering information inherited from the query. Nell'esempio seguente viene creato un oggetto DataView da una query LINQ to DataSetLINQ to DataSet che filtra i contatti in base ai cognomi che iniziano con 'S'.The following example creates a DataView from a LINQ to DataSetLINQ to DataSet query that filters by last names that start with 'S'. La proprietà Sort basata su stringa è impostata per ordinare i cognomi in ordine crescente e quindi i nomi in ordine decrescente:The string-based Sort property is set to sort on last names in ascending order and then first names in descending order:

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"

Creazione di una DataView da una DataTableCreating a DataView from a DataTable

Oltre che da un LINQ to DataSetLINQ to DataSet query, un DataView oggetto può essere creato da un DataTable utilizzando il AsDataView metodo.In addition to being created from a LINQ to DataSetLINQ to DataSet query, a DataView object can be created from a DataTable by using the AsDataView method.

Nell'esempio seguente viene creato un oggetto DataView dalla tabella SalesOrderDetail e viene impostato come origine dati di un oggetto BindingSource.The following example creates a DataView from the SalesOrderDetail table and sets it as the data source of a BindingSource object. L'oggetto funge da proxy per un controllo DataGridView.This object acts as a proxy for a DataGridView control.

DataTable orders = dataSet.Tables["SalesOrderDetail"];

DataView view = orders.AsDataView();
bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();
Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")

Dim view As DataView = orders.AsDataView()
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()

Dopo la creazione dell'oggetto DataView da DataTable, è possibile specificare le impostazioni di filtro e ordinamento.Filtering and sorting can be set on the DataView after it has been created from a DataTable. Nell'esempio seguente viene creato un oggetto DataView dalla tabella Contact e la proprietà Sort viene impostata in modo da ordinare i cognomi in ordine crescente e quindi i nomi in ordine decrescente:The following example creates a DataView from the Contact table and sets the Sort property to sort on last names in ascending order and then first names in descending order:

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()

Se tuttavia la proprietà RowFilter o Sort viene impostata dopo la creazione di DataView da una query, si verifica un decremento delle prestazioni perché DataView costruisce un indice per supportare le operazioni di filtro e ordinamento.However, there is a performance loss that comes with setting the RowFilter or Sort property after the DataView has been created from a query, because DataView constructs an index to support filtering and sorting operations. L'impostazione della proprietà RowFilter o Sort provoca una ricompilazione dell'indice dei dati, aggiungendo un sovraccarico all'applicazione e riducendo le prestazioni.Setting the RowFilter or Sort property rebuilds the index for the data, adding overhead to your application and decreasing performance. Se possibile, è preferibile specificare le impostazioni di filtro e ordinamento la prima volta che viene creato l'oggetto DataView ed evitare di modificarle in seguito.When possible, it is better to specify the filtering and sorting information when you first create the DataView and avoid modifying it afterwards.

Vedere ancheSee Also

Data binding e LINQ to DataSetData Binding and LINQ to DataSet
Filtro con DataViewFiltering with DataView
Ordinamento con DataViewSorting with DataView