DataGrid 控制項概觀 (Windows Form)
注意事項 |
---|
DataGridView 控制項會取代 DataGrid 控制項並加入其他功能,不過您也可以選擇保留 DataGrid 控制項,以提供回溯相容性及未來使用。 如需詳細資訊,請參閱 Windows Form DataGridView 和 DataGrid 控制項之間的差異。 |
Windows Form DataGrid 控制項在一系列的資料列和資料行中顯示資料。 最簡單的情形是當資料格繫結至具有單一資料表 (不包含關聯性) 的資料來源時。 在這種情況下,資料會出現在簡單的資料列和資料行中,就像試算表一樣。 如需將資料繫結至其他控制項的詳細資訊,請參閱資料繫結和 Windows Form。
如果 DataGrid 繫結至具有多個關聯資料表的資料,而且資料格巡覽啟用,則資料格會在每個資料列中顯示展開工具。 使用者可以使用展開工具,從父資料表移到子資料表。 按一下節點會顯示子資料表,而按一下 [上一頁] 按鈕則會顯示原始的父資料表。 利用這種方式,資料格可顯示資料表之間的階層式關聯性 (Relationship)。
以下的螢幕擷取畫面即顯示已繫結至具有多個資料表之資料的 DataGrid。
繫結至具有多個資料表的資料的 DataGrid
DataGrid 可以提供資料集的使用者介面、在關聯的資料表之間巡覽,以及豐富的格式化和編輯能力。
資料的顯示和操作分屬不同的功能:控制項處理使用者介面,而資料更新則是由 Windows Form 資料繫結 (Data Binding) 架構和 .NET Framework 資料提供者 (Data Provider) 處理。 因此,繫結至同一資料來源的多個控制項將保持同步。
Visual Basic 注意事項 |
---|
如果您熟悉 Visual Basic 6.0 的 DataGrid 控制項,則您會發現 Windows Form DataGrid 控制項有一些顯著的差異。 如需詳細資訊,請參閱Visual Basic 6.0 使用者可用的 DataGrid 控制項 和 用 Visual Studio 建立資料應用程式 和 使用 Visual Studio 建立資料應用程式 和 Visual Basic 6.0 使用者可用的 DataGrid 控制項. |
當資料格繫結至 DataSet 時,資料行和資料列會自動建立、格式化並填入資料。 如需詳細資訊,請參閱資料繫結和 Windows Form。 在 DataGrid 控制項產生之後,您可以根據自己的需要再加入、刪除、重新排列及格式化資料行和資料列。
將資料繫結至控制項
為了使 DataGrid 控制項能運作,需要使用 DataSource 和 DataMember 屬性 (在設計階段) 或 SetDataBinding 方法 (在執行階段),將控制項繫結至資料來源。 這個繫結動作會將 DataGrid 指向具現化 (Instantiated) 的資料來源物件 (例如 DataSet 或 DataTable)。 DataGrid 控制項會顯示在資料上執行動作的結果。 大多數資料特定的動作無法透過 DataGrid 執行,但是可以透過資料來源執行。
如果繫結資料集裡的資料,透過任何機制進行了更新,DataGrid 控制項將反映這些變更。 如果資料格和它的資料表樣式和資料行樣式的 ReadOnly 屬性設定為 false,則資料集的資料可透過 DataGrid 控制項更新。
DataGrid 一次只能顯示一個資料表。 如果在資料表之間定義了父子關聯性,則使用者可以在關聯資料表之間移動,選取要在 DataGrid 控制項中顯示的資料表。 如需將 DataGrid 控制項繫結至 ADO.NET 資料來源的詳細資訊 (在設計階段或執行階段),請參閱 HOW TO:將 Windows Form DataGrid 控制項繫結至資料來源。
有效的 DataGrid 資料來源包含:
如果您的來源是資料集,此資料集可能是表單中的物件或是由 XML Web Service 傳遞至表單的物件。 您可以繫結至具型別或不具型別的資料集。
如果結構中的物件 (例如陣列中的元素) 公開公用 (Public) 屬性,則您也可以將 DataGrid 控制項繫結至其他結構。 方格中會顯示結構中項目的所有公用屬性。 例如,如果您將 DataGrid 控制項繫結至客戶物件的陣列,則方格會顯示這些客戶物件的所有公用屬性。 在某些案例中,這表示雖然您可以繫結至結構,但產生的繫結結構可能並無實際上的作用。 例如,您可以繫結至整數陣列,但是因為 Integer 資料型別不支援公用屬性,因此資料格不會顯示任何資料。
如果下列結構中的項目公開公用屬性的話,您可與它們繫結:
任何實作 IList 介面的元件。 其中包括一維陣列。
任何實作 IListSource 介面的元件。
任何實作 IBindingList 介面的元件。
如需可能資料來源的詳細資訊,請參閱 Windows Form 支援的資料來源。
方格顯示
DataGrid 控制項的常見用途,是從資料集顯示單一資料表的資料。 不過,這個控制項也可用來顯示多個資料表,包括關聯資料表。 資料格的顯示方式會根據資料來源自動調整。 下表列出不同組態所顯示的內容。
資料集內容 |
顯示內容 |
---|---|
單一資料表。 |
資料格中會顯示資料表。 |
多個資料表。 |
方格可顯示樹狀檢視來讓使用者能夠加以巡覽來找出他們要顯示的資料表。 |
多個關聯資料表。 |
方格可顯示讓您選取資料表的樹狀檢視,或是您可指定方格顯示父資料表。 父資料表中的資料錄可以讓使用者巡覽至關聯的子資料列。 |
注意事項 |
---|
資料集中的資料表是使用 DataRelation 來產生關聯。 如需詳細資訊,請參閱資料集中的關聯性 和 資料集中的關聯性 和 資料集中的關聯性 和 資料集中的關聯性. |
當 DataGrid 控制項顯示資料表,且 AllowSorting 屬性設定為 true 時,您可按一下資料行標題,重新排序資料。 使用者也可以加入資料列和編輯儲存格。
使用巡覽的父/子結構,可將一組資料表之間的關聯性顯示給使用者看。 父資料表是資料的最高層次,子資料表則是衍生自父資料表個別清單的資料表。 展開工具顯示在每個包含子資料表的父資料列中, 按一下展開工具就會產生類似 Web 連結的清單,可連結至子資料表。 當使用者選取連結時,便會顯示子資料表。 按一下顯示/隱藏父資料列的圖示 () 將會隱藏父資料表的相關資訊 (如果之前已隱藏,則會重新顯示)。 使用者可以按一下 [上一頁] 按鈕,回到之前檢視的資料表。
資料行與資料列
DataGrid 是由 DataGridTableStyle 物件的集合所組成,這些物件包含在 DataGrid 控制項的 TableStyles 屬性中。 資料表樣式可能包含 DataGridColumnStyle 物件的集合,而這些物件包含在 DataGridTableStyle 的 GridColumnStyles 屬性中。 您可以使用透過 [屬性] 視窗存取的集合編輯器,編輯 TableStyles 和 GridColumnStyles 屬性。
任何與 DataGrid 控制項關聯的 DataGridTableStyle 都可以透過 GridTableStylesCollection 來存取。 GridTableStylesCollection 可以在設計工具中使用 DataGridTableStyle 集合編輯器加以編輯,或是透過 DataGrid 控制項的 TableStyles 屬性,以程式設計的方式編輯。
下列圖例將顯示在 DataGrid 控制項中所包含的物件。
將資料表和資料行的 MappingName 屬性設定為適當的 TableName 和 ColumnName 屬性,可以使資料表樣式和資料行樣式與 DataTable 物件和 DataColumn 物件同步。 將不含資料行樣式的 DataGridTableStyle 加入已繫結至有效資料來源的 DataGrid 控制項,並且將該資料表樣式的 MappingName 屬性設定為有效的 TableName 屬性時,便會為該資料表樣式建立 DataGridColumnStyle 物件的集合。 針對每個在 DataTable 之 Columns 集合中找到的 DataColumn,會將一個對應的 DataGridColumnStyle 加入至 GridColumnStylesCollection。 GridColumnStylesCollection 可透過 DataGridTableStyle 的 GridColumnStyles 屬性存取。 如果要在資料格中加入或刪除資料行,可以在 GridColumnStylesCollection 上使用 Add 或 Remove 方法。 如需詳細資訊,請參閱 HOW TO:將資料表和資料行加入至 Windows Form DataGrid 控制項和 HOW TO:刪除或隱藏 Windows Form DataGrid 控制項中的資料行。
資料行型別的集合為 DataGridColumnStyle 類別提供了多樣的格式化和編輯功能。 所有資料行型別都是繼承自 DataGridColumnStyle 基底類別。 所建立的類別是根據 DataGridColumn 所依據之 DataColumn 的 DataType 屬性而定。 例如,DataType 屬性設定為 Boolean 的 DataColumn 將會與 DataGridBoolColumn 產生關聯。 下表說明這些資料行型別。
資料行型別 |
說明 |
---|---|
接受和顯示格式化或未格式化字串的資料。 編輯功能與在簡單的 TextBox 中編輯資料的編輯功能相同。 繼承自 DataGridColumnStyle。 |
|
接受並顯示 true、false 和 null 值。 繼承自 DataGridColumnStyle。 |
按兩下資料行的右邊緣可調整資料行的大小以顯示整個標題和最長的項目。
資料表樣式和資料行樣式
在您建立 DataGrid 控制項的預設格式後,就可以立即自訂當某些資料表在資料格中顯示時所要使用的色彩。
這是透過建立 DataGridTableStyle 類別的執行個體 (Instance) 而達成的。 資料表樣式會指定特定資料表的格式,和 DataGrid 控制項本身的預設格式不同。 每個資料表一次可能只具有一個為它定義的資料表樣式。
有時候,您需要讓某個資料表中的某個特定資料行,看起來與其餘的資料行有所不同。 這時就可以使用 GridColumnStyles 屬性,建立一組自訂的資料行樣式。
在資料集中,資料行樣式和資料行的關係,就如同資料表樣式和資料表的關係一樣。 就像是每個資料表一次只能定義一個資料表樣式,在特定的資料表樣式中,每個資料行也只能定義一個資料行樣式。 這個關聯性是在資料行的 MappingName 屬性中定義的。
如果您已建立資料表樣式但是未加入資料行樣式,當您在執行階段建立表單和資料格時,Visual Studio 將會加入預設的資料行樣式。 但是,如果您已建立資料表樣式並且加入了資料行樣式,則 Visual Studio 將不會建立任何資料行樣式。 此外,您必須定義資料行樣式並為它們指派對應名稱,您所要的資料行才會顯示在資料格中。
由於您是藉由為資料行指派資料行樣式來指定哪些資料行要包含在資料格中,但是並沒有為資料行指派資料行樣式,因此您可以將沒有顯示在資料格中的資料行包含在資料集中。 不過,因為資料行包含在資料集中,因此您可以用程式設計的方式編輯未顯示的資料。
注意事項 |
---|
一般而言,將資料表樣式加入至資料表樣式集合之前,要建立資料行樣式並加入至資料行樣式集合中。 當您將空的資料表樣式加入至集合時,便會自動產生資料行樣式。 因此,如果您試圖以重複的 MappingName 值,將新的資料行樣式加入至資料行樣式集合,就會擲回例外狀況。 有時候,在眾多的資料行當中您只想調整一個資料行,例如,資料集包含 50 個資料行,而您只想要其中的 49 個資料行。 在這種情況下,將 50 個資料行全部匯入後,再用程式設計方式將一個資料行移除比較容易,而非將每個所要的 49 個資料行,以程式設計的方式個別加入。 |
格式
可套用至 DataGrid 控制項的格式,包含框線樣式、格線樣式、字型、標題屬性、資料對齊和資料列間的替換背景 (Background) 色彩。 如需詳細資訊,請參閱 HOW TO:格式化 Windows Form DataGrid 控制項。
事件
除了 MouseDown、Enter 和 Scroll 等常見的控制項事件以外,DataGrid 控制項還支援與在資料格中編輯和巡覽有關的事件。 CurrentCell 屬性用來判斷哪一個是選取的儲存格。 當使用者巡覽至新的儲存格時,會引發 CurrentCellChanged 事件。 當使用者透過父/子關聯巡覽至新的資料表時,會引發 Navigate 事件。 當使用者在檢視子資料表時按一下 [上一頁] 按鈕時,會引發 BackButtonClick 事件,當使用者按一下顯示/隱藏父資料列的圖示時,則會引發 ShowParentDetailsButtonClick 事件。
請參閱
工作
HOW TO:將 Windows Form DataGrid 控制項繫結至資料來源
HOW TO:將資料表和資料行加入至 Windows Form DataGrid 控制項
HOW TO:刪除或隱藏 Windows Form DataGrid 控制項中的資料行
HOW TO:格式化 Windows Form DataGrid 控制項