共用方式為


DataView 類別

定義

表示用於排序、篩選、搜尋、編輯和流覽之 DataTable 的數據系結、自定義檢視。 DataView 不會儲存數據,而是代表其對應 DataTable的聯機檢視。 DataView數據的變更會影響 DataTableDataTable數據的變更會影響與其相關聯的所有 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

下列範例會建立依 LINQ to DataSet 查詢總計排序的在線訂單 DataView

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。 例如,如果您想要在數據表上建立自定義檢視,請在 DefaultView所傳回的 DataView 上設定 RowFilter

若要建立篩選和排序的數據檢視,請設定 RowFilterSort 屬性。 然後,使用 Item[] 屬性傳回單一 DataRowView

您也可以使用 AddNewDelete 方法,從一組數據列新增和刪除。 當您使用這些方法時,RowStateFilter 屬性可以設定為指定只有已刪除的數據列或 DataView顯示新數據列。

注意

如果您未明確指定 DataView的排序準則,則會根據 DataTable.RowsDataRowCollection中 DataView 對應 DataRow 索引來排序 DataView 中的 DataRowView 物件。

LINQ to DataSet 可讓開發人員使用 LINQ,透過 DataSet 建立複雜且功能強大的查詢。 LINQ to DataSet 查詢會傳回 DataRow 物件的列舉,不過,這在系結案例中不容易使用。 您可以從 LINQ to DataSet 查詢建立 DataView,並採用該查詢的篩選和排序特性。 LINQ to DataSet 藉由提供 LINQ 運算式型篩選和排序來擴充 DataView 的功能,這可讓比字串型篩選和排序更複雜且強大的篩選和排序作業。 如需詳細資訊,請參閱 數據系結和 LINQ to DataSet

建構函式

DataView()

初始化 DataView 類別的新實例。

DataView(DataTable)

使用指定的 DataTable,初始化 DataView 類別的新實例。

DataView(DataTable, String, String, DataViewRowState)

使用指定的 DataTableRowFilterSortDataViewRowState,初始化 DataView 類別的新實例。

屬性

AllowDelete

取得或設定值,這個值表示是否允許刪除。

AllowEdit

取得或設定值,這個值表示是否允許編輯。

AllowNew

取得或設定值,這個值表示是否可以使用 AddNew() 方法加入新的數據列。

ApplyDefaultSort

取得或設定值,這個值表示是否要使用預設排序。 默認排序是由 PrimaryKey所指定的所有主鍵(遞增)。

Container

取得元件的容器。

(繼承來源 MarshalByValueComponent)
Count

取得套用 RowFilterRowStateFilter 之後,DataView 中的記錄數目。

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 的初始化,該 DataView 用於表單或由另一個元件使用。 初始化會在運行時間進行。

Close()

關閉 DataView

ColumnCollectionChanged(Object, CollectionChangeEventArgs)

在成功變更 DataColumnCollection 之後發生。

CopyTo(Array, Int32)

將專案複製到陣列中。 僅適用於 Web Forms 介面。

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

傳回包含 Component名稱的 String,如果有的話。 不應該覆寫這個方法。

(繼承來源 MarshalByValueComponent)
ToTable()

根據現有 DataView中的數據列,建立並傳回新的 DataTable

ToTable(Boolean, String[])

根據現有 DataView中的數據列,建立並傳回新的 DataTable

ToTable(String)

根據現有 DataView中的數據列,建立並傳回新的 DataTable

ToTable(String, Boolean, String[])

根據現有 DataView中的數據列,建立並傳回新的 DataTable

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)

IServiceProvider取得類型為 T 的服務。

GetKeyedServices(IServiceProvider, Type, Object)

IServiceProvider取得類型為 serviceType 的服務列舉。

GetKeyedServices<T>(IServiceProvider, Object)

IServiceProvider取得類型為 T 的服務列舉。

GetRequiredKeyedService(IServiceProvider, Type, Object)

IServiceProvider取得類型為 serviceType 的服務。

GetRequiredKeyedService<T>(IServiceProvider, Object)

IServiceProvider取得類型為 T 的服務。

CreateAsyncScope(IServiceProvider)

建立可用來解析範圍服務的新 AsyncServiceScope

CreateScope(IServiceProvider)

建立可用來解析範圍服務的新 IServiceScope

GetRequiredService(IServiceProvider, Type)

IServiceProvider取得類型為 serviceType 的服務。

GetRequiredService<T>(IServiceProvider)

IServiceProvider取得類型為 T 的服務。

GetService<T>(IServiceProvider)

IServiceProvider取得類型為 T 的服務。

GetServices(IServiceProvider, Type)

IServiceProvider取得類型為 serviceType 的服務列舉。

GetServices<T>(IServiceProvider)

IServiceProvider取得類型為 T 的服務列舉。

GetFakeLogCollector(IServiceProvider)

取得對象,這個物件會收集傳送至假記錄器之記錄檔記錄。

GetFakeRedactionCollector(IServiceProvider)

從相依性插入容器取得假的重構函式收集器實例。

Cast<TResult>(IEnumerable)

IEnumerable 的項目轉換成指定的型別。

OfType<TResult>(IEnumerable)

根據指定的型別篩選 IEnumerable 的專案。

AsParallel(IEnumerable)

啟用查詢的平行處理。

AsQueryable(IEnumerable)

IEnumerable 轉換成 IQueryable

適用於

執行緒安全性

此類型適用於多線程讀取作業。 您必須同步處理任何寫入作業。

另請參閱