Поделиться через


DataView Класс

Определение

Представляет настраиваемое представление DataTable для сортировки, фильтрации, поиска, редактирования и навигации. DataView не хранит данные, а представляет подключенное представление соответствующего DataTable. Изменения данных DataViewповлияют на DataTable. Изменения данных DataTableповлияют на все связанные с ним DataView.

public ref class DataView : System::ComponentModel::MarshalByValueComponent, System::Collections::IList, System::ComponentModel::IBindingListView, System::ComponentModel::ISupportInitialize, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList
public ref class DataView : System::ComponentModel::MarshalByValueComponent, System::Collections::IList, System::ComponentModel::IBindingList, System::ComponentModel::ISupportInitialize, System::ComponentModel::ITypedList
public ref class DataView : System::ComponentModel::MarshalByValueComponent, System::Collections::IList, System::ComponentModel::IBindingListView, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList
public ref class DataView : System::ComponentModel::MarshalByValueComponent, System::ComponentModel::IBindingListView, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList
public class DataView : System.ComponentModel.MarshalByValueComponent, System.Collections.IList, System.ComponentModel.IBindingListView, System.ComponentModel.ISupportInitialize, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList
public class DataView : System.ComponentModel.MarshalByValueComponent, System.Collections.IList, System.ComponentModel.IBindingList, System.ComponentModel.ISupportInitialize, System.ComponentModel.ITypedList
public class DataView : System.ComponentModel.MarshalByValueComponent, System.Collections.IList, System.ComponentModel.IBindingListView, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList
public class DataView : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IBindingListView, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList
type DataView = class
    inherit MarshalByValueComponent
    interface ICollection
    interface IEnumerable
    interface IList
    interface IBindingList
    interface IBindingListView
    interface ISupportInitialize
    interface ISupportInitializeNotification
    interface ITypedList
type DataView = class
    inherit MarshalByValueComponent
    interface IBindingList
    interface IList
    interface ICollection
    interface IEnumerable
    interface ITypedList
    interface ISupportInitialize
type DataView = class
    inherit MarshalByValueComponent
    interface IBindingListView
    interface IBindingList
    interface IList
    interface ICollection
    interface IEnumerable
    interface ITypedList
    interface ISupportInitializeNotification
    interface ISupportInitialize
Public Class DataView
Inherits MarshalByValueComponent
Implements IBindingListView, IList, ISupportInitialize, ISupportInitializeNotification, ITypedList
Public Class DataView
Inherits MarshalByValueComponent
Implements IBindingList, IList, ISupportInitialize, ITypedList
Public Class DataView
Inherits MarshalByValueComponent
Implements IBindingListView, IList, ISupportInitializeNotification, ITypedList
Public Class DataView
Inherits MarshalByValueComponent
Implements IBindingListView, ISupportInitializeNotification, ITypedList
Наследование
Реализации

Примеры

В следующем примере создается один DataTable с одним столбцом и пятью строками. Создаются два объекта DataView, а для каждого RowStateFilter отображаются различные представления данных таблицы. Затем будут напечатаны значения.

using System;
using System.Xml;
using System.Data;
using System.Data.Common;
using System.Windows.Forms;

public class Form1: Form
{
    protected DataSet DataSet1;
    protected DataGrid dataGrid1;

    private void DemonstrateDataView()
    {
        // Create one DataTable with one column.
        DataTable table = new DataTable("table");
        DataColumn colItem = new DataColumn("item",
            Type.GetType("System.String"));
        table.Columns.Add(colItem);

        // Add five items.
        DataRow NewRow;
        for(int i = 0; i <5; i++)
        {
            NewRow = table.NewRow();
            NewRow["item"] = "Item " + i;
            table.Rows.Add(NewRow);
        }
        // Change the values in the table.
        table.AcceptChanges();
        table.Rows[0]["item"]="cat";
        table.Rows[1]["item"] = "dog";

        // Create two DataView objects with the same table.
        DataView firstView = new DataView(table);
        DataView secondView = new DataView(table);

        // Print current table values.
        PrintTableOrView(table,"Current Values in Table");

        // Set first DataView to show only modified
        // versions of original rows.
        firstView.RowStateFilter=DataViewRowState.ModifiedOriginal;

        // Print values.
        PrintTableOrView(firstView,"First DataView: ModifiedOriginal");

        // Add one New row to the second view.
        DataRowView rowView;
        rowView=secondView.AddNew();
        rowView["item"] = "fish";

        // Set second DataView to show modified versions of
        // current rows, or New rows.
        secondView.RowStateFilter=DataViewRowState.ModifiedCurrent
            | DataViewRowState.Added;
        // Print modified and Added rows.
        PrintTableOrView(secondView,
            "Second DataView: ModifiedCurrent | Added");
    }

    private void PrintTableOrView(DataTable table, string label)
    {
        // This function prints values in the table or DataView.
        Console.WriteLine("\n" + label);
        for(int i = 0; i<table.Rows.Count;i++)
        {
            Console.WriteLine(table.Rows[i]["item"]);
        }
        Console.WriteLine();
    }

    private void PrintTableOrView(DataView view, string label)
    {

        // This overload prints values in the table or DataView.
        Console.WriteLine("\n" + label);
        for(int i = 0; i<view.Count;i++)
        {
            Console.WriteLine(view[i]["item"]);
        }
        Console.WriteLine();
    }
}
Private Sub DemonstrateDataView()
    ' Create one DataTable with one column.
    Dim table As New DataTable("table")
    Dim colItem As New DataColumn("item", _
        Type.GetType("System.String"))
    table.Columns.Add(colItem)

    ' Add five items.
    Dim NewRow As DataRow
    Dim i As Integer
    For i = 0 To 4
    
    NewRow = table.NewRow()
    NewRow("item") = "Item " & i
    table.Rows.Add(NewRow)
    Next
    table.AcceptChanges()

    ' Create two DataView objects with the same table.
    Dim firstView As New DataView(table)
    Dim secondView As New DataView(table)
    
    ' Change the values in the table.
    table.Rows(0)("item") = "cat"
    table.Rows(1)("item") = "dog"
    
    ' Print current table values.
    PrintTableOrView(table, "Current Values in Table")
        
    ' Set first DataView to show only modified versions of original rows.
    firstView.RowStateFilter = DataViewRowState.ModifiedOriginal

    ' Print values.    
    PrintTableOrView(firstView, "First DataView: ModifiedOriginal")

    ' Add one New row to the second view.
    Dim rowView As DataRowView
    rowView = secondView.AddNew()
    rowView("item") = "fish"
    ' Set second DataView to show modified versions of 
    ' current rows, or New rows.
    secondView.RowStateFilter = DataViewRowState.ModifiedCurrent _
        Or DataViewRowState.Added
    ' Print modified and Added rows.
    PrintTableOrView(secondView, _
        "Second DataView: ModifiedCurrent or Added")
End Sub
    
Overloads Private Sub PrintTableOrView( _
    ByVal view As DataView, ByVal label As String)
    Console.WriteLine(label)
    Dim i As Integer
    For i = 0 To view.count - 1
    
    Console.WriteLine(view(i)("item"))
    Next
    Console.WriteLine()
End Sub
    
Overloads Private Sub PrintTableOrView( _
    ByVal table As DataTable, ByVal label As String)
    Console.WriteLine(label)
    Dim i As Integer
    For i = 0 To table.Rows.Count - 1
    Console.WriteLine(table.Rows(i)("item"))
    Next
    Console.WriteLine()
End Sub

В следующем примере создается DataView онлайн-заказов, упорядоченных по общему объему из запроса LINQ to DataSet:

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

Комментарии

Основная функция DataView заключается в том, чтобы обеспечить привязку данных как в Windows Forms, так и в Web Forms.

Кроме того, можно настроить DataView, чтобы представить подмножество данных из DataTable. Эта возможность позволяет иметь два элемента управления, привязанные к одной и той же DataTable, но которые показывают разные версии данных. Например, один элемент управления может быть привязан к DataView, в котором отображаются все строки таблицы, а вторая может быть настроена для отображения только строк, удаленных из DataTable. DataTable также имеет свойство DefaultView. Возвращается DataView по умолчанию для таблицы. Например, если вы хотите создать пользовательское представление в таблице, задайте RowFilter на DataView, возвращаемой DefaultView.

Чтобы создать отфильтрованное и отсортированный представление данных, задайте свойства RowFilter и Sort. Затем используйте свойство Item[] для возврата одного DataRowView.

Вы также можете добавить и удалить из набора строк с помощью методов AddNew и Delete. При использовании этих методов свойство RowStateFilter может задать, чтобы указать, что DataViewбудут отображаться только удаленные строки или новые строки.

Заметка

Если явно не указывать критерии сортировки для DataView, то объекты DataRowView в DataView сортируются на основе индекса соответствующих DataRow DataView в DataTable.RowsDataRowCollection.

LINQ to DataSet позволяет разработчикам создавать сложные, мощные запросы по DataSet с помощью LINQ. Запрос LINQ to DataSet возвращает перечисление объектов DataRow, однако это не легко используется в сценарии привязки. DataView можно создать из запроса LINQ to DataSet и принять характеристики фильтрации и сортировки этого запроса. LINQ to DataSet расширяет функциональные возможности DataView путем фильтрации и сортировки на основе выражений LINQ, что позволяет выполнять гораздо более сложные и мощные операции фильтрации и сортировки, чем фильтрация на основе строк. Дополнительные сведения см. в привязке данных и LINQ to DataSet.

Конструкторы

DataView()

Инициализирует новый экземпляр класса DataView.

DataView(DataTable)

Инициализирует новый экземпляр класса DataView с указанным DataTable.

DataView(DataTable, String, String, DataViewRowState)

Инициализирует новый экземпляр класса DataView с указанным DataTable, RowFilter, Sortи DataViewRowState.

Свойства

AllowDelete

Возвращает или задает значение, указывающее, разрешены ли удаления.

AllowEdit

Возвращает или задает значение, указывающее, разрешены ли изменения.

AllowNew

Возвращает или задает значение, указывающее, можно ли добавлять новые строки с помощью метода AddNew().

ApplyDefaultSort

Возвращает или задает значение, указывающее, следует ли использовать сортировку по умолчанию. Сортировка по умолчанию (возрастает) по всем первичным ключам, как указано в PrimaryKey.

Container

Возвращает контейнер для компонента.

(Унаследовано от MarshalByValueComponent)
Count

Возвращает количество записей в DataView после применения RowFilter и RowStateFilter.

DataViewManager

Возвращает DataViewManager, связанную с этим представлением.

DesignMode

Возвращает значение, указывающее, находится ли компонент в режиме конструктора.

(Унаследовано от MarshalByValueComponent)
Events

Возвращает список обработчиков событий, подключенных к этому компоненту.

(Унаследовано от MarshalByValueComponent)
IsInitialized

Возвращает значение, указывающее, инициализирован ли компонент.

IsOpen

Возвращает значение, указывающее, открыт ли источник данных и проецирует представления данных в DataTable.

Item[Int32]

Возвращает строку данных из указанной таблицы.

RowFilter

Возвращает или задает выражение, используемое для фильтрации строк, которые отображаются в DataView.

RowStateFilter

Возвращает или задает фильтр состояния строки, используемый в DataView.

Site

Возвращает или задает сайт компонента.

(Унаследовано от MarshalByValueComponent)
Sort

Возвращает или задает столбец сортировки или столбцы, а также порядок сортировки для DataView.

Table

Возвращает или задает исходный DataTable.

Методы

AddNew()

Добавляет новую строку в DataView.

BeginInit()

Запускает инициализацию DataView, которая используется в форме или используется другим компонентом. Инициализация происходит во время выполнения.

Close()

Закрывает DataView.

ColumnCollectionChanged(Object, CollectionChangeEventArgs)

Происходит после успешного изменения DataColumnCollection.

CopyTo(Array, Int32)

Копирует элементы в массив. Только для интерфейсов веб-форм.

Delete(Int32)

Удаляет строку по указанному индексу.

Dispose()

Освобождает все ресурсы, используемые MarshalByValueComponent.

(Унаследовано от MarshalByValueComponent)
Dispose(Boolean)

Удаляет ресурсы (кроме памяти), используемые объектом DataView.

EndInit()

Завершает инициализацию DataView, которая используется в форме или используется другим компонентом. Инициализация происходит во время выполнения.

Equals(DataView)

Определяет, считаются ли указанные экземпляры DataView равными.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Find(Object)

Находит строку в DataView по указанному значению ключа сортировки.

Find(Object[])

Находит строку в DataView указанными значениями ключа сортировки.

FindRows(Object)

Возвращает массив объектов DataRowView, столбцы которых соответствуют указанному значению ключа сортировки.

FindRows(Object[])

Возвращает массив объектов DataRowView, столбцы которых соответствуют указанному значению ключа сортировки.

GetEnumerator()

Возвращает перечислитель для этого DataView.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetService(Type)

Возвращает реализацию IServiceProvider.

(Унаследовано от MarshalByValueComponent)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
IndexListChanged(Object, ListChangedEventArgs)

Происходит после успешного изменения DataView.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
OnListChanged(ListChangedEventArgs)

Вызывает событие ListChanged.

Open()

Открывает DataView.

Reset()

Зарезервировано только для внутреннего использования.

ToString()

Возвращает String, содержащую имя Component, если таковой имеется. Этот метод не должен быть переопределен.

(Унаследовано от MarshalByValueComponent)
ToTable()

Создает и возвращает новую DataTable на основе строк в существующей DataView.

ToTable(Boolean, String[])

Создает и возвращает новую DataTable на основе строк в существующей DataView.

ToTable(String)

Создает и возвращает новую DataTable на основе строк в существующей DataView.

ToTable(String, Boolean, String[])

Создает и возвращает новую DataTable на основе строк в существующей DataView.

UpdateIndex()

Зарезервировано только для внутреннего использования.

UpdateIndex(Boolean)

Зарезервировано только для внутреннего использования.

События

Disposed

Добавляет обработчик событий для прослушивания события Disposed компонента.

(Унаследовано от MarshalByValueComponent)
Initialized

Происходит при завершении инициализации DataView.

ListChanged

Происходит при изменении списка, управляемого DataView.

Явные реализации интерфейса

IBindingList.AddIndex(PropertyDescriptor)

Описание этого элемента см. в разделе AddIndex(PropertyDescriptor).

IBindingList.AddNew()

Описание этого элемента см. в разделе AddNew().

IBindingList.AllowEdit

Описание этого элемента см. в разделе AllowEdit.

IBindingList.AllowNew

Описание этого элемента см. в разделе AllowNew.

IBindingList.AllowRemove

Описание этого элемента см. в разделе AllowRemove.

IBindingList.ApplySort(PropertyDescriptor, ListSortDirection)

Описание этого элемента см. в разделе ApplySort(PropertyDescriptor, ListSortDirection).

IBindingList.Find(PropertyDescriptor, Object)

Описание этого элемента см. в разделе Find(PropertyDescriptor, Object).

IBindingList.IsSorted

Описание этого элемента см. в разделе IsSorted.

IBindingList.RemoveIndex(PropertyDescriptor)

Описание этого элемента см. в разделе RemoveIndex(PropertyDescriptor).

IBindingList.RemoveSort()

Описание этого элемента см. в разделе RemoveSort().

IBindingList.SortDirection

Описание этого элемента см. в разделе SortDirection.

IBindingList.SortProperty

Описание этого элемента см. в разделе SortProperty.

IBindingList.SupportsChangeNotification

Описание этого элемента см. в разделе SupportsChangeNotification.

IBindingList.SupportsSearching

Описание этого элемента см. в разделе SupportsSearching.

IBindingList.SupportsSorting

Описание этого элемента см. в разделе SupportsSorting.

IBindingListView.ApplySort(ListSortDescriptionCollection)

Описание этого элемента см. в разделе ApplySort(ListSortDescriptionCollection).

IBindingListView.Filter

Описание этого элемента см. в разделе Filter.

IBindingListView.RemoveFilter()

Описание этого элемента см. в разделе RemoveFilter().

IBindingListView.SortDescriptions

Описание этого элемента см. в разделе SortDescriptions.

IBindingListView.SupportsAdvancedSorting

Описание этого элемента см. в разделе SupportsAdvancedSorting.

IBindingListView.SupportsFiltering

Описание этого элемента см. в разделе SupportsFiltering.

ICollection.IsSynchronized

Описание этого элемента см. в разделе IsSynchronized.

ICollection.SyncRoot

Описание этого элемента см. в разделе SyncRoot.

IList.Add(Object)

Описание этого элемента см. в разделе Add(Object).

IList.Clear()

Описание этого элемента см. в разделе Clear().

IList.Contains(Object)

Описание этого элемента см. в разделе Contains(Object).

IList.IndexOf(Object)

Описание этого элемента см. в разделе IndexOf(Object).

IList.Insert(Int32, Object)

Описание этого элемента см. в разделе Insert(Int32, Object).

IList.IsFixedSize

Описание этого элемента см. в разделе IsFixedSize.

IList.IsReadOnly

Описание этого элемента см. в разделе IsReadOnly.

IList.Item[Int32]

Описание этого элемента см. в разделе Item[Int32].

IList.Remove(Object)

Описание этого элемента см. в разделе Remove(Object).

IList.RemoveAt(Int32)

Описание этого элемента см. в разделе RemoveAt(Int32).

ITypedList.GetItemProperties(PropertyDescriptor[])

Описание этого элемента см. в разделе GetItemProperties(PropertyDescriptor[]).

ITypedList.GetListName(PropertyDescriptor[])

Описание этого элемента см. в разделе GetListName(PropertyDescriptor[]).

Методы расширения

GetKeyedService<T>(IServiceProvider, Object)

Возвращает службу типа T из IServiceProvider.

GetKeyedServices(IServiceProvider, Type, Object)

Возвращает перечисление служб типа serviceType из IServiceProvider.

GetKeyedServices<T>(IServiceProvider, Object)

Возвращает перечисление служб типа T из IServiceProvider.

GetRequiredKeyedService(IServiceProvider, Type, Object)

Возвращает службу типа serviceType из IServiceProvider.

GetRequiredKeyedService<T>(IServiceProvider, Object)

Возвращает службу типа T из IServiceProvider.

CreateAsyncScope(IServiceProvider)

Создает новый AsyncServiceScope, который можно использовать для разрешения служб с областью действия.

CreateScope(IServiceProvider)

Создает новый IServiceScope, который можно использовать для разрешения служб с областью действия.

GetRequiredService(IServiceProvider, Type)

Получение службы типа serviceType из IServiceProvider.

GetRequiredService<T>(IServiceProvider)

Получение службы типа T из IServiceProvider.

GetService<T>(IServiceProvider)

Получение службы типа T из IServiceProvider.

GetServices(IServiceProvider, Type)

Получение перечисления служб типа serviceType из IServiceProvider.

GetServices<T>(IServiceProvider)

Получение перечисления служб типа T из IServiceProvider.

GetFakeLogCollector(IServiceProvider)

Возвращает объект, который собирает записи журнала, отправленные в поддельный средство ведения журнала.

GetFakeRedactionCollector(IServiceProvider)

Возвращает экземпляр сборщика поддельных редакторов из контейнера внедрения зависимостей.

Cast<TResult>(IEnumerable)

Приведение элементов IEnumerable к указанному типу.

OfType<TResult>(IEnumerable)

Фильтрует элементы IEnumerable на основе указанного типа.

AsParallel(IEnumerable)

Включает параллелизацию запроса.

AsQueryable(IEnumerable)

Преобразует IEnumerable в IQueryable.

Применяется к

Потокобезопасность

Этот тип является безопасным для многопоточных операций чтения. Необходимо синхронизировать все операции записи.

См. также раздел