Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Esistono due modi per creare un oggetto DataView nel contesto LINQ to DataSet. È possibile creare un oggetto DataView da una query LINQ to DataSet su un DataTable oggetto oppure da un oggetto tipizzato o non tipizzato DataTable. In entrambi i casi, si crea DataView utilizzando uno dei AsDataView metodi di estensione. DataView Non è direttamente costruiscibile nel contesto LINQ to DataSet.
Dopo aver creato , DataView è possibile associarlo a un controllo dell'interfaccia utente in un'applicazione Windows Form o a un'applicazione ASP.NET oppure modificare le impostazioni di filtro e ordinamento.
DataView costruisce un indice, che aumenta significativamente le prestazioni delle operazioni che possono usare l'indice, ad esempio il filtro e l'ordinamento. L'indice per un DataView viene compilato sia quando il DataView viene creato, sia quando vengono modificate una qualsiasi delle informazioni di ordinamento o filtro. La creazione di un DataView e successivamente l'impostazione delle informazioni di ordinamento o filtro determina la costruzione dell'indice almeno due volte: una volta quando l'indice è creato e di nuovo quando una delle proprietà di ordinamento o filtro viene modificata.
Per altre informazioni sul filtro e l'ordinamento con DataView, vedere Applicazione di filtri con DataView e ordinamento con DataView.
Creazione di DataView da una query LINQ to DataSet
È possibile creare un DataView oggetto dai risultati di una query LINQ to DataSet, in cui i risultati sono una proiezione di DataRow oggetti. L'oggetto appena creato DataView eredita le informazioni di filtro e ordinamento dalla query da cui viene creato.
Annotazioni
Nella maggior parte dei casi, le espressioni usate per filtrare e ordinare non devono avere effetti collaterali e devono essere deterministiche. Inoltre, le espressioni non devono contenere alcuna logica che dipende da un numero impostato di esecuzioni, perché le operazioni di ordinamento e filtro possono essere eseguite un numero qualsiasi di volte.
La creazione di un oggetto DataView da una query che restituisce tipi anonimi o query che eseguono operazioni di join non è supportata.
In una query usata per creare DataViewsono supportati solo gli operatori di query seguenti:
Si noti che quando un oggetto DataView viene creato da una query LINQ to DataSet, il Select metodo deve essere il metodo finale chiamato nella query. Questo è illustrato nell'esempio seguente, che crea un elenco di ordini online ordinati in base al totale dovuto.
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query =
from order in orders.AsEnumerable()
where order.Field<bool>("OnlineOrderFlag")
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
È anche possibile usare le proprietà basate su stringa RowFilter e Sort per filtrare e ordinare un DataView dopo che è stato creato da una query. Si noti che verranno cancellate le informazioni di ordinamento e filtro ereditate dalla query. Nell'esempio seguente viene creato un oggetto DataView da una query LINQ to DataSet che filtra in base al cognome che inizia con "S". La proprietà Sort basata su stringa è impostata per l'ordinamento in base ai cognomi in ordine crescente e poi i nomi in ordine decrescente:
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 un oggetto DataView da un oggetto DataTable
Oltre a essere creato da una query LINQ to DataSet, è possibile creare un DataView oggetto da un DataTable oggetto usando il AsDataView metodo .
Nell'esempio seguente viene creato un oggetto DataView dalla tabella SalesOrderDetail e viene impostato come origine dati di un BindingSource oggetto . Questo oggetto funge da proxy per un DataGridView controllo .
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()
Il filtro e l'ordinamento possono essere impostati su DataView dopo che è stato creato da un oggetto DataTable. Nell'esempio seguente viene creato un oggetto DataView dalla tabella Contact e viene impostata la proprietà Sort per ordinare prima i cognomi in ordine crescente e poi i nomi in ordine decrescente.
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()
Tuttavia, si verifica una perdita di prestazioni impostando la proprietà RowFilter o Sort dopo che DataView è stata creata da una query, poiché DataView costruisce un indice per supportare le operazioni di filtro e ordinamento. L'impostazione della RowFilter proprietà o Sort ricompila l'indice per i dati, aggiungendo un sovraccarico all'applicazione e riducendo le prestazioni. Quando possibile, è preferibile specificare i filtri e le informazioni di ordinamento quando si crea DataView per la prima volta e evitare di modificarle in seguito.