DataGrid 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在可捲動方格中顯示 ADO.NET 資料。
此類別在 .NET Core 3.1 和更新版本中無法使用。 請改用 DataGridView 控件,以取代和擴充 DataGrid 控件。
public ref class DataGrid : System::Windows::Forms::Control, System::ComponentModel::ISupportInitialize, System::Windows::Forms::IDataGridEditingService
public class DataGrid : System.Windows.Forms.Control, System.ComponentModel.ISupportInitialize, System.Windows.Forms.IDataGridEditingService
[System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch)]
[System.Runtime.InteropServices.ComVisible(true)]
public class DataGrid : System.Windows.Forms.Control, System.ComponentModel.ISupportInitialize, System.Windows.Forms.IDataGridEditingService
type DataGrid = class
inherit Control
interface ISupportInitialize
interface IDataGridEditingService
[<System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type DataGrid = class
inherit Control
interface ISupportInitialize
interface IDataGridEditingService
Public Class DataGrid
Inherits Control
Implements IDataGridEditingService, ISupportInitialize
- 繼承
- 屬性
- 實作
範例
下列程式代碼範例會建立 Windows 表單、 DataSet 包含兩 DataTable 個 物件的 ,以及 DataRelation 與兩個資料表相關的 。 若要顯示資料,System.Windows.Forms.DataGrid控制項接著會透過 SetDataBinding 方法系結至 DataSet 。 表單上的按鈕會藉由建立兩 DataGridTableStyle 個 物件並將每個物件的 設定 MappingName 為 TableName 其中一個 DataTable 物件的 ,來變更網格線的外觀。 此範例也包含 事件中的 MouseUp 程式代碼,該事件會使用 HitTest 方法來列印已單擊之方格的數據行、列和部分。
#using <system.dll>
#using <system.data.dll>
#using <system.drawing.dll>
#using <system.windows.forms.dll>
#using <system.xml.dll>
using namespace System;
using namespace System::ComponentModel;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Windows::Forms;
#define null 0
public ref class Form1: public System::Windows::Forms::Form
{
private:
System::ComponentModel::Container^ components;
Button^ button1;
Button^ button2;
DataGrid^ myDataGrid;
DataSet^ myDataSet;
bool TablesAlreadyAdded;
public:
Form1()
{
// Required for Windows Form Designer support.
InitializeComponent();
// Call SetUp to bind the controls.
SetUp();
}
public:
~Form1()
{
if ( components != nullptr )
{
delete components;
}
}
private:
void InitializeComponent()
{
// Create the form and its controls.
this->components = gcnew System::ComponentModel::Container;
this->button1 = gcnew System::Windows::Forms::Button;
this->button2 = gcnew System::Windows::Forms::Button;
this->myDataGrid = gcnew DataGrid;
this->Text = "DataGrid Control Sample";
this->ClientSize = System::Drawing::Size( 450, 330 );
button1->Location = System::Drawing::Point( 24, 16 );
button1->Size = System::Drawing::Size( 120, 24 );
button1->Text = "Change Appearance";
button1->Click += gcnew System::EventHandler( this, &Form1::button1_Click );
button2->Location = System::Drawing::Point( 150, 16 );
button2->Size = System::Drawing::Size( 120, 24 );
button2->Text = "Get Binding Manager";
button2->Click += gcnew System::EventHandler( this, &Form1::button2_Click );
myDataGrid->Location = System::Drawing::Point( 24, 50 );
myDataGrid->Size = System::Drawing::Size( 300, 200 );
myDataGrid->CaptionText = "Microsoft DataGrid Control";
myDataGrid->MouseUp += gcnew MouseEventHandler( this, &Form1::Grid_MouseUp );
this->Controls->Add( button1 );
this->Controls->Add( button2 );
this->Controls->Add( myDataGrid );
}
void SetUp()
{
// Create a DataSet with two tables and one relation.
MakeDataSet();
/* Bind the DataGrid to the DataSet. The dataMember
specifies that the Customers table should be displayed.*/
myDataGrid->SetDataBinding( myDataSet, "Customers" );
}
private:
void button1_Click( Object^ sender, System::EventArgs^ e )
{
if ( TablesAlreadyAdded )
return;
AddCustomDataTableStyle();
}
private:
void AddCustomDataTableStyle()
{
DataGridTableStyle^ ts1 = gcnew DataGridTableStyle;
ts1->MappingName = "Customers";
// Set other properties.
ts1->AlternatingBackColor = Color::LightGray;
/* Add a GridColumnStyle and set its MappingName
to the name of a DataColumn in the DataTable.
Set the HeaderText and Width properties. */
DataGridColumnStyle^ boolCol = gcnew DataGridBoolColumn;
boolCol->MappingName = "Current";
boolCol->HeaderText = "IsCurrent Customer";
boolCol->Width = 150;
ts1->GridColumnStyles->Add( boolCol );
// Add a second column style.
DataGridColumnStyle^ TextCol = gcnew DataGridTextBoxColumn;
TextCol->MappingName = "custName";
TextCol->HeaderText = "Customer Name";
TextCol->Width = 250;
ts1->GridColumnStyles->Add( TextCol );
// Create the second table style with columns.
DataGridTableStyle^ ts2 = gcnew DataGridTableStyle;
ts2->MappingName = "Orders";
// Set other properties.
ts2->AlternatingBackColor = Color::LightBlue;
// Create new ColumnStyle objects
DataGridColumnStyle^ cOrderDate = gcnew DataGridTextBoxColumn;
cOrderDate->MappingName = "OrderDate";
cOrderDate->HeaderText = "Order Date";
cOrderDate->Width = 100;
ts2->GridColumnStyles->Add( cOrderDate );
/* Use a PropertyDescriptor to create a formatted
column. First get the PropertyDescriptorCollection
for the data source and data member. */
PropertyDescriptorCollection^ pcol = this->BindingContext[myDataSet, "Customers.custToOrders"]->GetItemProperties();
/* Create a formatted column using a PropertyDescriptor.
The formatting character "c" specifies a currency format. */
DataGridColumnStyle^ csOrderAmount = gcnew DataGridTextBoxColumn( pcol[ "OrderAmount" ],"c",true );
csOrderAmount->MappingName = "OrderAmount";
csOrderAmount->HeaderText = "Total";
csOrderAmount->Width = 100;
ts2->GridColumnStyles->Add( csOrderAmount );
/* Add the DataGridTableStyle instances to
the GridTableStylesCollection. */
myDataGrid->TableStyles->Add( ts1 );
myDataGrid->TableStyles->Add( ts2 );
// Sets the TablesAlreadyAdded to true so this doesn't happen again.
TablesAlreadyAdded = true;
}
private:
void button2_Click( Object^ sender, System::EventArgs^ e )
{
BindingManagerBase^ bmGrid;
bmGrid = BindingContext[myDataSet, "Customers"];
MessageBox::Show( String::Concat( "Current BindingManager Position: ", bmGrid->Position )->ToString() );
}
private:
void Grid_MouseUp( Object^ sender, MouseEventArgs^ e )
{
// Create a HitTestInfo object using the HitTest method.
// Get the DataGrid by casting sender.
DataGrid^ myGrid = dynamic_cast<DataGrid^>(sender);
DataGrid::HitTestInfo ^ myHitInfo = myGrid->HitTest( e->X, e->Y );
Console::WriteLine( myHitInfo );
Console::WriteLine( myHitInfo->Type );
Console::WriteLine( myHitInfo->Row );
Console::WriteLine( myHitInfo->Column );
}
// Create a DataSet with two tables and populate it.
void MakeDataSet()
{
// Create a DataSet.
myDataSet = gcnew DataSet( "myDataSet" );
// Create two DataTables.
DataTable^ tCust = gcnew DataTable( "Customers" );
DataTable^ tOrders = gcnew DataTable( "Orders" );
// Create two columns, and add them to the first table.
DataColumn^ cCustID = gcnew DataColumn( "CustID",__int32::typeid );
DataColumn^ cCustName = gcnew DataColumn( "CustName" );
DataColumn^ cCurrent = gcnew DataColumn( "Current",bool::typeid );
tCust->Columns->Add( cCustID );
tCust->Columns->Add( cCustName );
tCust->Columns->Add( cCurrent );
// Create three columns, and add them to the second table.
DataColumn^ cID = gcnew DataColumn( "CustID",__int32::typeid );
DataColumn^ cOrderDate = gcnew DataColumn( "orderDate",DateTime::typeid );
DataColumn^ cOrderAmount = gcnew DataColumn( "OrderAmount",Decimal::typeid );
tOrders->Columns->Add( cOrderAmount );
tOrders->Columns->Add( cID );
tOrders->Columns->Add( cOrderDate );
// Add the tables to the DataSet.
myDataSet->Tables->Add( tCust );
myDataSet->Tables->Add( tOrders );
// Create a DataRelation, and add it to the DataSet.
DataRelation^ dr = gcnew DataRelation( "custToOrders",cCustID,cID );
myDataSet->Relations->Add( dr );
/* Populate the tables. For each customer and order,
create need two DataRow variables. */
DataRow^ newRow1;
DataRow^ newRow2;
// Create three customers in the Customers Table.
for ( int i = 1; i < 4; i++ )
{
newRow1 = tCust->NewRow();
newRow1[ "custID" ] = i;
// Add the row to the Customers table.
tCust->Rows->Add( newRow1 );
}
tCust->Rows[ 0 ][ "custName" ] = "Customer1";
tCust->Rows[ 1 ][ "custName" ] = "Customer2";
tCust->Rows[ 2 ][ "custName" ] = "Customer3";
// Give the Current column a value.
tCust->Rows[ 0 ][ "Current" ] = true;
tCust->Rows[ 1 ][ "Current" ] = true;
tCust->Rows[ 2 ][ "Current" ] = false;
// For each customer, create five rows in the Orders table.
for ( int i = 1; i < 4; i++ )
{
for ( int j = 1; j < 6; j++ )
{
newRow2 = tOrders->NewRow();
newRow2[ "CustID" ] = i;
newRow2[ "orderDate" ] = DateTime(2001,i,j * 2);
newRow2[ "OrderAmount" ] = i * 10 + j * .1;
// Add the row to the Orders table.
tOrders->Rows->Add( newRow2 );
}
}
}
};
int main()
{
Application::Run( gcnew Form1 );
}
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private Button button1;
private Button button2;
private DataGrid myDataGrid;
private DataSet myDataSet;
private bool TablesAlreadyAdded;
public Form1()
{
// Required for Windows Form Designer support.
InitializeComponent();
// Call SetUp to bind the controls.
SetUp();
}
protected override void Dispose( bool disposing ){
if( disposing ){
if (components != null){
components.Dispose();}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
// Create the form and its controls.
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.myDataGrid = new DataGrid();
this.Text = "DataGrid Control Sample";
this.ClientSize = new System.Drawing.Size(450, 330);
button1.Location = new Point(24, 16);
button1.Size = new System.Drawing.Size(120, 24);
button1.Text = "Change Appearance";
button1.Click+=new System.EventHandler(button1_Click);
button2.Location = new Point(150, 16);
button2.Size = new System.Drawing.Size(120, 24);
button2.Text = "Get Binding Manager";
button2.Click+=new System.EventHandler(button2_Click);
myDataGrid.Location = new Point(24, 50);
myDataGrid.Size = new Size(300, 200);
myDataGrid.CaptionText = "Microsoft DataGrid Control";
myDataGrid.MouseUp += new MouseEventHandler(Grid_MouseUp);
this.Controls.Add(button1);
this.Controls.Add(button2);
this.Controls.Add(myDataGrid);
}
public static void Main()
{
Application.Run(new Form1());
}
private void SetUp()
{
// Create a DataSet with two tables and one relation.
MakeDataSet();
/* Bind the DataGrid to the DataSet. The dataMember
specifies that the Customers table should be displayed.*/
myDataGrid.SetDataBinding(myDataSet, "Customers");
}
private void button1_Click(object sender, System.EventArgs e)
{
if(TablesAlreadyAdded) return;
AddCustomDataTableStyle();
}
private void AddCustomDataTableStyle()
{
DataGridTableStyle ts1 = new DataGridTableStyle();
ts1.MappingName = "Customers";
// Set other properties.
ts1.AlternatingBackColor = Color.LightGray;
/* Add a GridColumnStyle and set its MappingName
to the name of a DataColumn in the DataTable.
Set the HeaderText and Width properties. */
DataGridColumnStyle boolCol = new DataGridBoolColumn();
boolCol.MappingName = "Current";
boolCol.HeaderText = "IsCurrent Customer";
boolCol.Width = 150;
ts1.GridColumnStyles.Add(boolCol);
// Add a second column style.
DataGridColumnStyle TextCol = new DataGridTextBoxColumn();
TextCol.MappingName = "custName";
TextCol.HeaderText = "Customer Name";
TextCol.Width = 250;
ts1.GridColumnStyles.Add(TextCol);
// Create the second table style with columns.
DataGridTableStyle ts2 = new DataGridTableStyle();
ts2.MappingName = "Orders";
// Set other properties.
ts2.AlternatingBackColor = Color.LightBlue;
// Create new ColumnStyle objects
DataGridColumnStyle cOrderDate =
new DataGridTextBoxColumn();
cOrderDate.MappingName = "OrderDate";
cOrderDate.HeaderText = "Order Date";
cOrderDate.Width = 100;
ts2.GridColumnStyles.Add(cOrderDate);
/* Use a PropertyDescriptor to create a formatted
column. First get the PropertyDescriptorCollection
for the data source and data member. */
PropertyDescriptorCollection pcol = this.BindingContext
[myDataSet, "Customers.custToOrders"].GetItemProperties();
/* Create a formatted column using a PropertyDescriptor.
The formatting character "c" specifies a currency format. */
DataGridColumnStyle csOrderAmount =
new DataGridTextBoxColumn(pcol["OrderAmount"], "c", true);
csOrderAmount.MappingName = "OrderAmount";
csOrderAmount.HeaderText = "Total";
csOrderAmount.Width = 100;
ts2.GridColumnStyles.Add(csOrderAmount);
/* Add the DataGridTableStyle instances to
the GridTableStylesCollection. */
myDataGrid.TableStyles.Add(ts1);
myDataGrid.TableStyles.Add(ts2);
// Sets the TablesAlreadyAdded to true so this doesn't happen again.
TablesAlreadyAdded=true;
}
private void button2_Click(object sender, System.EventArgs e)
{
BindingManagerBase bmGrid;
bmGrid = BindingContext[myDataSet, "Customers"];
MessageBox.Show("Current BindingManager Position: " + bmGrid.Position);
}
private void Grid_MouseUp(object sender, MouseEventArgs e)
{
// Create a HitTestInfo object using the HitTest method.
// Get the DataGrid by casting sender.
DataGrid myGrid = (DataGrid)sender;
DataGrid.HitTestInfo myHitInfo = myGrid.HitTest(e.X, e.Y);
Console.WriteLine(myHitInfo);
Console.WriteLine(myHitInfo.Type);
Console.WriteLine(myHitInfo.Row);
Console.WriteLine(myHitInfo.Column);
}
// Create a DataSet with two tables and populate it.
private void MakeDataSet()
{
// Create a DataSet.
myDataSet = new DataSet("myDataSet");
// Create two DataTables.
DataTable tCust = new DataTable("Customers");
DataTable tOrders = new DataTable("Orders");
// Create two columns, and add them to the first table.
DataColumn cCustID = new DataColumn("CustID", typeof(int));
DataColumn cCustName = new DataColumn("CustName");
DataColumn cCurrent = new DataColumn("Current", typeof(bool));
tCust.Columns.Add(cCustID);
tCust.Columns.Add(cCustName);
tCust.Columns.Add(cCurrent);
// Create three columns, and add them to the second table.
DataColumn cID =
new DataColumn("CustID", typeof(int));
DataColumn cOrderDate =
new DataColumn("orderDate",typeof(DateTime));
DataColumn cOrderAmount =
new DataColumn("OrderAmount", typeof(decimal));
tOrders.Columns.Add(cOrderAmount);
tOrders.Columns.Add(cID);
tOrders.Columns.Add(cOrderDate);
// Add the tables to the DataSet.
myDataSet.Tables.Add(tCust);
myDataSet.Tables.Add(tOrders);
// Create a DataRelation, and add it to the DataSet.
DataRelation dr = new DataRelation
("custToOrders", cCustID , cID);
myDataSet.Relations.Add(dr);
/* Populates the tables. For each customer and order,
creates two DataRow variables. */
DataRow newRow1;
DataRow newRow2;
// Create three customers in the Customers Table.
for(int i = 1; i < 4; i++)
{
newRow1 = tCust.NewRow();
newRow1["custID"] = i;
// Add the row to the Customers table.
tCust.Rows.Add(newRow1);
}
// Give each customer a distinct name.
tCust.Rows[0]["custName"] = "Customer1";
tCust.Rows[1]["custName"] = "Customer2";
tCust.Rows[2]["custName"] = "Customer3";
// Give the Current column a value.
tCust.Rows[0]["Current"] = true;
tCust.Rows[1]["Current"] = true;
tCust.Rows[2]["Current"] = false;
// For each customer, create five rows in the Orders table.
for(int i = 1; i < 4; i++)
{
for(int j = 1; j < 6; j++)
{
newRow2 = tOrders.NewRow();
newRow2["CustID"]= i;
newRow2["orderDate"]= new DateTime(2001, i, j * 2);
newRow2["OrderAmount"] = i * 10 + j * .1;
// Add the row to the Orders table.
tOrders.Rows.Add(newRow2);
}
}
}
}
Option Explicit
Option Strict
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits System.Windows.Forms.Form
Private components As System.ComponentModel.Container
Private button1 As Button
Private button2 As Button
Private myDataGrid As DataGrid
Private myDataSet As DataSet
Private TablesAlreadyAdded As Boolean
Public Sub New()
' Required for Windows Form Designer support.
InitializeComponent()
' Call SetUp to bind the controls.
SetUp()
End Sub
Private Sub InitializeComponent()
' Create the form and its controls.
Me.components = New System.ComponentModel.Container()
Me.button1 = New System.Windows.Forms.Button()
Me.button2 = New System.Windows.Forms.Button()
Me.myDataGrid = New DataGrid()
Me.Text = "DataGrid Control Sample"
Me.ClientSize = New System.Drawing.Size(450, 330)
button1.Location = New Point(24, 16)
button1.Size = New System.Drawing.Size(120, 24)
button1.Text = "Change Appearance"
AddHandler button1.Click, AddressOf button1_Click
button2.Location = New Point(150, 16)
button2.Size = New System.Drawing.Size(120, 24)
button2.Text = "Get Binding Manager"
AddHandler button2.Click, AddressOf button2_Click
myDataGrid.Location = New Point(24, 50)
myDataGrid.Size = New Size(300, 200)
myDataGrid.CaptionText = "Microsoft DataGrid Control"
AddHandler myDataGrid.MouseUp, AddressOf Grid_MouseUp
Me.Controls.Add(button1)
Me.Controls.Add(button2)
Me.Controls.Add(myDataGrid)
End Sub
Public Shared Sub Main()
Application.Run(New Form1())
End Sub
Private Sub SetUp()
' Create a DataSet with two tables and one relation.
MakeDataSet()
' Bind the DataGrid to the DataSet. The dataMember
' specifies that the Customers table should be displayed.
myDataGrid.SetDataBinding(myDataSet, "Customers")
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If TablesAlreadyAdded = True Then Exit Sub
AddCustomDataTableStyle()
End Sub
Private Sub AddCustomDataTableStyle()
Dim ts1 As New DataGridTableStyle()
ts1.MappingName = "Customers"
' Set other properties.
ts1.AlternatingBackColor = Color.LightGray
' Add a GridColumnStyle and set its MappingName
' to the name of a DataColumn in the DataTable.
' Set the HeaderText and Width properties.
Dim boolCol As New DataGridBoolColumn()
boolCol.MappingName = "Current"
boolCol.HeaderText = "IsCurrent Customer"
boolCol.Width = 150
ts1.GridColumnStyles.Add(boolCol)
' Add a second column style.
Dim TextCol As New DataGridTextBoxColumn()
TextCol.MappingName = "custName"
TextCol.HeaderText = "Customer Name"
TextCol.Width = 250
ts1.GridColumnStyles.Add(TextCol)
' Create the second table style with columns.
Dim ts2 As New DataGridTableStyle()
ts2.MappingName = "Orders"
' Set other properties.
ts2.AlternatingBackColor = Color.LightBlue
' Create new ColumnStyle objects
Dim cOrderDate As New DataGridTextBoxColumn()
cOrderDate.MappingName = "OrderDate"
cOrderDate.HeaderText = "Order Date"
cOrderDate.Width = 100
ts2.GridColumnStyles.Add(cOrderDate)
' Use a PropertyDescriptor to create a formatted
' column. First get the PropertyDescriptorCollection
' for the data source and data member.
Dim pcol As PropertyDescriptorCollection = _
Me.BindingContext(myDataSet, "Customers.custToOrders"). _
GetItemProperties()
' Create a formatted column using a PropertyDescriptor.
' The formatting character "c" specifies a currency format. */
Dim csOrderAmount As _
New DataGridTextBoxColumn(pcol("OrderAmount"), "c", True)
csOrderAmount.MappingName = "OrderAmount"
csOrderAmount.HeaderText = "Total"
csOrderAmount.Width = 100
ts2.GridColumnStyles.Add(csOrderAmount)
' Add the DataGridTableStyle instances to
' the GridTableStylesCollection.
myDataGrid.TableStyles.Add(ts1)
myDataGrid.TableStyles.Add(ts2)
' Sets the TablesAlreadyAdded to true so this doesn't happen again.
TablesAlreadyAdded = true
End Sub
Private Sub button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim bmGrid As BindingManagerBase
bmGrid = BindingContext(myDataSet, "Customers")
MessageBox.Show(("Current BindingManager Position: " & bmGrid.Position))
End Sub
Private Sub Grid_MouseUp(sender As Object, e As MouseEventArgs)
' Create a HitTestInfo object using the HitTest method.
' Get the DataGrid by casting sender.
Dim myGrid As DataGrid = CType(sender, DataGrid)
Dim myHitInfo As DataGrid.HitTestInfo = myGrid.HitTest(e.X, e.Y)
Console.WriteLine(myHitInfo)
Console.WriteLine(myHitInfo.Type)
Console.WriteLine(myHitInfo.Row)
Console.WriteLine(myHitInfo.Column)
End Sub
' Create a DataSet with two tables and populate it.
Private Sub MakeDataSet()
' Create a DataSet.
myDataSet = New DataSet("myDataSet")
' Create two DataTables.
Dim tCust As New DataTable("Customers")
Dim tOrders As New DataTable("Orders")
' Create two columns, and add them to the first table.
Dim cCustID As New DataColumn("CustID", GetType(Integer))
Dim cCustName As New DataColumn("CustName")
Dim cCurrent As New DataColumn("Current", GetType(Boolean))
tCust.Columns.Add(cCustID)
tCust.Columns.Add(cCustName)
tCust.Columns.Add(cCurrent)
' Create three columns, and add them to the second table.
Dim cID As New DataColumn("CustID", GetType(Integer))
Dim cOrderDate As New DataColumn("orderDate", GetType(DateTime))
Dim cOrderAmount As New DataColumn("OrderAmount", GetType(Decimal))
tOrders.Columns.Add(cOrderAmount)
tOrders.Columns.Add(cID)
tOrders.Columns.Add(cOrderDate)
' Add the tables to the DataSet.
myDataSet.Tables.Add(tCust)
myDataSet.Tables.Add(tOrders)
' Create a DataRelation, and add it to the DataSet.
Dim dr As New DataRelation("custToOrders", cCustID, cID)
myDataSet.Relations.Add(dr)
' Populates the tables. For each customer and order,
' creates two DataRow variables.
Dim newRow1 As DataRow
Dim newRow2 As DataRow
' Create three customers in the Customers Table.
Dim i As Integer
For i = 1 To 3
newRow1 = tCust.NewRow()
newRow1("custID") = i
' Add the row to the Customers table.
tCust.Rows.Add(newRow1)
Next i
' Give each customer a distinct name.
tCust.Rows(0)("custName") = "Customer1"
tCust.Rows(1)("custName") = "Customer2"
tCust.Rows(2)("custName") = "Customer3"
' Give the Current column a value.
tCust.Rows(0)("Current") = True
tCust.Rows(1)("Current") = True
tCust.Rows(2)("Current") = False
' For each customer, create five rows in the Orders table.
For i = 1 To 3
Dim j As Integer
For j = 1 To 5
newRow2 = tOrders.NewRow()
newRow2("CustID") = i
newRow2("orderDate") = New DateTime(2001, i, j * 2)
newRow2("OrderAmount") = i * 10 + j * 0.1
' Add the row to the Orders table.
tOrders.Rows.Add(newRow2)
Next j
Next i
End Sub
End Class
備註
此類別在 .NET Core 3.1 和更新版本中無法使用。 請改用 DataGridView 控件。
會顯示 System.Windows.Forms.DataGrid 類似 Web 的連結至子數據表。 您可以按下連結以瀏覽至子資料表。 顯示子數據表時,返回按鈕會出現在可按兩下的 標題 中,以巡覽回父數據表。 父數據列的數據會顯示在數據行標頭上方 標題 和上方。 您可以按下返回按鈕右邊的按鈕來隱藏父數據列資訊。
若要在運行時間顯示 數據表System.Windows.Forms.DataGrid,請使用 SetDataBinding 方法將 和 DataMember 屬性設定DataSource為有效的數據源。 下列資料來源有效:
單一維度陣列
任何實作 介面的 IListSource 元件
任何實作 介面的 IList 元件
如需 類別的詳細資訊 DataSet ,請參閱 DataSets、DataTables 和 DataViews。
您可以建立方格,讓使用者編輯資料,但防止他們新增資料列,方法是使用 DataView 做為資料來源,並將屬性設定 AllowNew 為 false
。
數據源會由 BindingManagerBase 物件進一步管理。 針對資料來源中的每個資料表, BindingManagerBase 可以從表單 的 BindingContext傳回 。 例如,您可以藉由傳回相關聯 BindingManagerBase 對象的 Count 屬性,來判斷數據源所包含的數據列數目。
若要驗證數據,請使用代表數據及其事件的基礎物件。 例如,如果數據來自 DataTable 中的 DataSet,請使用 ColumnChanging 和 RowChanging 事件。
注意
由於可以藉由新增或刪除) 的成員 GridColumnStylesCollection 來自定義數據行數目 (,而且數據列可以依數據行排序, RowNumber 因此無法保證 和 ColumnNumber 屬性值對應至 DataRow 中的 和 DataColumn 索引 DataTable。 因此,您應該避免在 事件中使用 Validating 那些屬性來驗證數據。
若要判斷選取哪一個儲存格,請使用 CurrentCell 屬性。 使用 Item[] 屬性來變更任何儲存格的值,其可採用儲存格的資料列和資料列索引,或單 DataGridCell一 。 CurrentCellChanged監視事件,以偵測使用者何時選取另一個單元格。
若要判斷使用者按兩下的控制件哪個部分,請使用 HitTest 事件中的 MouseDown 方法。 方法 HitTest 會傳 DataGrid.HitTestInfo 回 物件,其中包含單擊區域的數據列和數據行。
若要管理控制件在運行時間的外觀,有數個屬性可用來設定色彩和 標題 屬性,包括CaptionForeColor、CaptionBackColor、 CaptionFont等等。
您可以藉由建立 DataGridTableStyle 物件,並將其新增至 GridTableStylesCollection可透過 TableStyles 屬性存取的 ,進一步修改顯示網格線 (或) 網格線的外觀。 例如,如果 DataSource 設定為包含三DataTable個物件的 ,您可以將三DataGridTableStyle個DataSet物件新增至集合,每個數據表各有一個物件。 若要將每個DataGridTableStyle物件與DataTable同步處理,請將 的 DataGridTableStyle 設定MappingName為 TableName 的 DataTable。 如需系結至物件陣列的詳細資訊,請參閱 DataGridTableStyle.MappingName 屬性。
若要建立資料表的自定義檢視,請建立 或類別的DataGridTextBoxColumn實例,並將物件加入至GridTableStylesCollection透過 屬性存取的 TableStyles 。DataGridBoolColumn 這兩個類別都是繼承自 DataGridColumnStyle。 針對每個資料列樣式,將設定MappingNameColumnName為您要顯示在方格中之資料列的 。 若要隱藏資料行,請將它 MappingName 設定為有效的 ColumnName以外的專案。
若要格式化數據行的文字,請將 Format 的 DataGridTextBoxColumn 屬性設定為 [格式化類型 ] 和 [自定義日期和時間格式字串] 中找到的其中一個值。
若要將 系結 DataGrid 至物件的強型別數位,物件類型必須包含公用屬性。 若要建立 DataGridTableStyle 顯示陣列的 ,請將 DataGridTableStyle.MappingName 屬性設定為 typename[]
,其中 typename
會以物件類型的名稱取代。 另請注意, MappingName 屬性會區分大小寫;類型名稱必須完全符合。 如需範例, MappingName 請參閱 屬性。
您也可以將 繫結 DataGrid 至 ArrayList。 的功能 ArrayList 是它可以包含多個類型的物件,但 DataGrid 只有在清單中的所有專案都與第一個專案相同時,才能系結至這類清單。 這表示所有對象都必須屬於相同的類型,或者它們必須繼承自與清單中第一個專案相同的類別。 例如,如果清單中的第一個專案是 Control,第二個專案可能是 TextBox 繼承自 Control) (。 如果另一方面,第一個專案是 ,第二個TextBoxControl物件不能是 。 此外, ArrayList 在系結專案時,必須有其中的專案。 空 ArrayList 的將會產生空的方格。 此外,中的 ArrayList 對象必須包含公用屬性。 當系結至 ArrayList時,請將 的 DataGridTableStyle 設定MappingName為 “ArrayList” (類型名稱) 。
針對每個 DataGridTableStyle,您可以設定色彩和 標題 屬性,以覆寫控件的System.Windows.Forms.DataGrid設定。 不過,如果未設定這些屬性,預設會使用控件的設定。 屬性可以覆寫 DataGridTableStyle 下列屬性:
若要自定義個別數據行的外觀,請將 物件新增 DataGridColumnStyle 至 GridColumnStylesCollection,其可透過 GridColumnStyles 每個 DataGridTableStyle的屬性存取。 若要將中的每個 DataGridColumnStyle 與 DataColumn 中的 DataTable同步處理,請將 設定 MappingName 為 ColumnName 的 DataColumn。 建 DataGridColumnStyle構 時,您也可以設定格式字串,指定數據行顯示資料的方式。 例如,您可以指定資料行使用簡短日期格式來顯示資料表中包含的日期。
警告
一律先建立 DataGridColumnStyle 物件,並在將物件新增至 GridColumnStylesCollection 之前將其新增 DataGridTableStyle 至 GridTableStylesCollection。 當您將具有有效MappingName值的空白DataGridTableStyle加入至集合時,DataGridColumnStyle系統會自動為您產生物件。 因此,如果您嘗試將具有重複MappingName值的新DataGridColumnStyle物件新增至 GridColumnStylesCollection,就會擲回例外狀況。
注意
DataGridView 控制項會取代 DataGrid 控制項並加入其他功能,不過您也可以選擇保留 DataGrid 控制項,以提供回溯相容性及未來使用。 如需詳細資訊,請參閱 Windows Forms DataGridView 和 DataGrid 控制項之間的差異。
建構函式
DataGrid() |
初始化 DataGrid 類別的新執行個體。 |
屬性
AccessibilityObject |
取得指定給控制項的 AccessibleObject。 (繼承來源 Control) |
AccessibleDefaultActionDescription |
取得或設定協助用戶端應用程式所使用的控制項的預設動作描述。 (繼承來源 Control) |
AccessibleDescription |
取得或設定協助工具用戶端應用程式使用之控制項的描述。 (繼承來源 Control) |
AccessibleName |
取得或設定協助工具用戶端應用程式使用的控制項名稱。 (繼承來源 Control) |
AccessibleRole |
取得或設定控制項的可存取角色。 (繼承來源 Control) |
AllowDrop |
取得或設定值,指出控制項是否能接受使用者拖放上來的資料。 (繼承來源 Control) |
AllowNavigation |
取得或設定值,表示是否允許巡覽作業。 |
AllowSorting |
取得或設定值,表示是否按一下資料行行首即可排序方格。 |
AlternatingBackColor |
取得或設定方格奇數資料列的背景色彩。 |
Anchor |
取得或設定控制項繫結至的容器邊緣,並決定控制項隨其父代重新調整大小的方式。 (繼承來源 Control) |
AutoScrollOffset |
取得或設定此控制項在 ScrollControlIntoView(Control) 中要捲動到哪一個位置。 (繼承來源 Control) |
AutoSize |
這個屬性與這個類別無關。 (繼承來源 Control) |
BackColor |
取得或設定方格其偶數資料列的背景色彩。 |
BackgroundColor |
取得或設定方格的資料列以外區域的色彩。 |
BackgroundImage |
這個成員對這個控制項來說不具意義。 |
BackgroundImageLayout |
這個成員對這個控制項來說不具意義。 |
BackgroundImageLayout |
取得或設定在 ImageLayout 列舉類型中所定義的背景影像配置。 (繼承來源 Control) |
BindingContext |
取得或設定控制項的 BindingContext。 (繼承來源 Control) |
BorderStyle |
取得或設定方格的框線樣式。 |
Bottom |
取得控制項下邊緣和其容器工作區 (Client Area) 上邊緣之間的距離 (單位為像素)。 (繼承來源 Control) |
Bounds |
取得或設定控制項 (包括其非工作區項目) 相對於父控制項之大小和位置 (單位為像素)。 (繼承來源 Control) |
CanEnableIme |
取得值,這個值表示 ImeMode 屬性是否可以設定為使用中的值,以啟用 IME 支援。 (繼承來源 Control) |
CanFocus |
取得指示控制項是否能取得焦點的值。 (繼承來源 Control) |
CanRaiseEvents |
判斷是否可以在控制項上引發事件。 (繼承來源 Control) |
CanSelect |
取得指示能否選取控制項的值。 (繼承來源 Control) |
CaptionBackColor |
取得或設定標題區域的背景色彩。 |
CaptionFont |
取得或設定方格標題的字型。 |
CaptionForeColor |
取得或設定標題區域的前景色彩。 |
CaptionText |
取得或設定方格的視窗標題文字。 |
CaptionVisible |
取得或設定值,表示方格標題是否可見。 |
Capture |
取得或設定值,指出控制項是否捕捉住滑鼠。 (繼承來源 Control) |
CausesValidation |
取得或設定值,指出控制項取得焦點時,是否會在任何需要驗證的控制項上執行驗證。 (繼承來源 Control) |
ClientRectangle |
取得表示控制項工作區的矩形。 (繼承來源 Control) |
ClientSize |
取得或設定控制項工作區的高度和寬度。 (繼承來源 Control) |
ColumnHeadersVisible |
取得或設定值,表示資料表的資料行行首是否可見。 |
CompanyName |
取得包含控制項之應用程式的公司名稱或建立者。 (繼承來源 Control) |
Container |
取得包含 IContainer 的 Component。 (繼承來源 Component) |
ContainsFocus |
取得指示控制項 (或其子控制項之一) 目前是否擁有輸入焦點的值。 (繼承來源 Control) |
ContextMenu |
取得或設定與控制項關聯的捷徑功能表。 (繼承來源 Control) |
ContextMenuStrip |
取得或設定與這個控制項相關的 ContextMenuStrip。 (繼承來源 Control) |
Controls |
取得控制項中包含的控制項集合。 (繼承來源 Control) |
Created |
取得值,指出是否已經建立控制項。 (繼承來源 Control) |
CreateParams |
建立控制代碼時,取得必要的建立參數。 (繼承來源 Control) |
CurrentCell |
取得或設定由那個儲存格取得焦點 (Focus)。 無法在設計階段使用。 |
CurrentRowIndex |
取得或設定目前具有焦點之資料列的索引。 |
Cursor |
這個成員對這個控制項來說不具意義。 |
DataBindings |
取得控制項的資料繫結 (Data Binding)。 (繼承來源 Control) |
DataContext |
取得或設定數據系結用途的數據內容。 這是環境屬性。 (繼承來源 Control) |
DataMember |
取得或設定 DataSource 中的特定清單,DataGrid 控制項將使用方格顯示這個清單。 |
DataSource |
取得或設定在方格中顯示資料的資料來源。 |
DefaultCursor |
取得或設定控制項的預設游標。 (繼承來源 Control) |
DefaultImeMode |
取得控制項支援的預設輸入法 (IME) 模式。 (繼承來源 Control) |
DefaultMargin |
取得控制項之間的預設指定間距 (單位為像素)。 (繼承來源 Control) |
DefaultMaximumSize |
取得指定為控制項的預設大小之最大值的長度和高度 (單位為像素)。 (繼承來源 Control) |
DefaultMinimumSize |
取得指定為控制項的預設大小之最小值的長度和高度 (單位為像素)。 (繼承來源 Control) |
DefaultPadding |
取得控制項內容的預設內部間距,以像素為單位。 (繼承來源 Control) |
DefaultSize |
取得控制項的預設大小。 |
DesignMode |
取得值,指出 Component 目前是否處於設計模式。 (繼承來源 Component) |
DeviceDpi |
取得目前顯示控制項的顯示裝置的 DPI 值。 (繼承來源 Control) |
DisplayRectangle |
取得表示控制項顯示區域的矩形。 (繼承來源 Control) |
Disposing |
取得值,指出基底 Control 類別是否正在處置的過程中。 (繼承來源 Control) |
Dock |
取得或設定停駐在其父控制項的控制項框線,並決定控制項隨其父代重新調整大小的方式。 (繼承來源 Control) |
DoubleBuffered |
取得或設定值,指出這個控制項是否應使用次要緩衝區重繪其介面,以減少或防止重繪閃動 (Flicker)。 (繼承來源 Control) |
Enabled |
取得或設定值,指出控制項是否可回應使用者互動。 (繼承來源 Control) |
Events |
取得附加在這個 Component 上的事件處理常式清單。 (繼承來源 Component) |
FirstVisibleColumn |
取得方格第一個可見資料行的索引。 |
FlatMode |
取得或設定值,表示是否以一般模式顯示方格。 |
Focused |
取得指示控制項是否擁有輸入焦點的值。 (繼承來源 Control) |
Font |
取得或設定控制項顯示之文字字型。 (繼承來源 Control) |
FontHeight |
取得或設定控制項字型的高度。 (繼承來源 Control) |
ForeColor |
取得或設定 DataGrid 控制項的前景色彩 (通常是文字的色彩) 屬性。 |
GridLineColor |
取得或設定格線色彩。 |
GridLineStyle |
取得或設定格線樣式。 |
Handle |
取得控制項要繫結的目標視窗控制代碼。 (繼承來源 Control) |
HasChildren |
取得指示控制項是否包含一或多個子控制項的值。 (繼承來源 Control) |
HeaderBackColor |
取得或設定所有資料列和資料行行首的背景色彩。 |
HeaderFont |
取得或設定資料行行首使用的字型。 |
HeaderForeColor |
取得或設定標頭的前景色彩。 |
Height |
取得或設定控制項的高度。 (繼承來源 Control) |
HorizScrollBar |
取得方格的水平捲軸。 |
ImeMode |
取得或設定控制項的輸入法 (IME) 模式。 (繼承來源 Control) |
ImeModeBase |
取得或設定控制項的 IME 模式。 (繼承來源 Control) |
InvokeRequired |
取得一個值。這個值會指示是否由於呼叫端是在建立控制項之執行緒以外的執行緒,因此在進行控制項的方法呼叫時,應呼叫叫用 (Invoke) 方法。 (繼承來源 Control) |
IsAccessible |
取得或設定值,指出可及性應用程式是否見得到控制項。 (繼承來源 Control) |
IsAncestorSiteInDesignMode |
指出這個控件的其中一個上階是否已月臺,以及該月臺在 DesignMode 中。 這是唯讀的屬性。 (繼承來源 Control) |
IsDisposed |
取得指示控制項是否已經處置的值。 (繼承來源 Control) |
IsHandleCreated |
取得指示控制項是否有相關控制代碼的值。 (繼承來源 Control) |
IsMirrored |
取得值,指出是否左右反轉控制項。 (繼承來源 Control) |
Item[DataGridCell] |
取得或設定指定的 DataGridCell 值。 |
Item[Int32, Int32] |
取得或設定指定資料列和資料行儲存格的值。 |
LayoutEngine |
取得控制項之配置引擎的快取執行個體。 (繼承來源 Control) |
Left |
取得或設定控制項左邊緣和其容器工作區 (Client Area) 左邊緣之間的距離 (單位為像素)。 (繼承來源 Control) |
LinkColor |
取得或設定文字色彩,按一下這個文字便可巡覽至子資料表。 |
LinkHoverColor |
這個成員對這個控制項來說不具意義。 |
ListManager |
取得這個 CurrencyManager 控制項的 DataGrid。 |
Location |
取得或設定對應至控制項容器左上角之控制項左上角的座標。 (繼承來源 Control) |
Margin |
取得或設定控制項之間的空格。 (繼承來源 Control) |
MaximumSize |
取得或設定 GetPreferredSize(Size) 可以指定的上限大小。 (繼承來源 Control) |
MinimumSize |
取得或設定 GetPreferredSize(Size) 可以指定的下限大小。 (繼承來源 Control) |
Name |
取得或設定控制項的名稱。 (繼承來源 Control) |
Padding |
取得或設定控制項內的邊框間距。 (繼承來源 Control) |
Parent |
取得或設定控制項的父容器。 (繼承來源 Control) |
ParentRowsBackColor |
取得或設定父資料列的背景色彩。 |
ParentRowsForeColor |
取得或設定父資料列的前景色彩。 |
ParentRowsLabelStyle |
取得或設定父資料列標籤的顯示方式。 |
ParentRowsVisible |
取得或設定值,表示資料表的父資料列是否可見。 |
PreferredColumnWidth |
取得或設定方格中資料行的預設寬度,單位為像素。 |
PreferredRowHeight |
取得或設定 DataGrid 控制項的慣用資料列高度。 |
PreferredSize |
取得能夠容納控制項的矩形區域的大小。 (繼承來源 Control) |
ProductName |
取得包含控制項的組件的產品名稱。 (繼承來源 Control) |
ProductVersion |
取得包含控制項的組件的版本。 (繼承來源 Control) |
ReadOnly |
取得或設定值,表示方格是否在唯讀模式中。 |
RecreatingHandle |
取得指示控制項目前是否正重新建立其控制代碼的值。 (繼承來源 Control) |
Region |
取得或設定與控制項關聯的視窗區域。 (繼承來源 Control) |
RenderRightToLeft |
已淘汰.
已淘汰.
此屬性現在已過時。 (繼承來源 Control) |
ResizeRedraw |
取得或設定值,指出控制項重設大小時,是否會重繪本身。 (繼承來源 Control) |
Right |
取得控制項右邊緣和其容器工作區 (Client Area) 左邊緣之間的距離 (單位為像素)。 (繼承來源 Control) |
RightToLeft |
取得或設定值,指出控制項的項目是否對齊,以支援使用由右至左字型的地區設定。 (繼承來源 Control) |
RowHeadersVisible |
取得或設定值,指定資料列標頭是否可見。 |
RowHeaderWidth |
取得或設定資料列標頭的寬度。 |
ScaleChildren |
取得值,以判斷子控制項的縮放。 (繼承來源 Control) |
SelectionBackColor |
取得或設定選取資料列的背景色彩。 |
SelectionForeColor |
取得或設定選取資料列的前景色彩。 |
ShowFocusCues |
取得指示控制項是否應顯示焦點矩形 (Focus Rectangle) 的值。 (繼承來源 Control) |
ShowKeyboardCues |
取得值,指出使用者介面是否處於可顯示或隱藏鍵盤快速鍵的適當狀態下。 (繼承來源 Control) |
Site |
取得或設定控制項的站台。 |
Size |
取得或設定控制項的高度和寬度。 (繼承來源 Control) |
TabIndex |
取得或設定控制項容器中的控制項定位順序。 (繼承來源 Control) |
TableStyles |
取得方格中 DataGridTableStyle 物件的集合。 |
TabStop |
取得或設定值,指出使用者是否能使用 TAB 鍵,將焦點 (Focus) 給予這個控制項。 (繼承來源 Control) |
Tag |
取得或設定物件,其包含控制項相關資料。 (繼承來源 Control) |
Text |
這個成員對這個控制項來說不具意義。 |
Top |
取得或設定控制項上邊緣和其容器工作區 (Client Area) 上邊緣之間的距離 (單位為像素)。 (繼承來源 Control) |
TopLevelControl |
取得沒有其他 Windows Form 父控制項的父控制項。 通常,這會是內含控制項最外層的 Form。 (繼承來源 Control) |
UseWaitCursor |
取得或設定值,指出是否將等待游標用於目前控制項和所有子控制項。 (繼承來源 Control) |
VertScrollBar |
取得控制項的垂直捲軸。 |
Visible |
取得或設定值,這個值指出是否顯示控制項及其所有子控制項。 (繼承來源 Control) |
VisibleColumnCount |
取得可見的資料行編號。 |
VisibleRowCount |
取得可見資料列的編號。 |
Width |
取得或設定控制項的寬度。 (繼承來源 Control) |
WindowTarget |
這個屬性與這個類別無關。 (繼承來源 Control) |
方法
事件
明確介面實作
IDropTarget.OnDragDrop(DragEventArgs) |
引發 DragDrop 事件。 (繼承來源 Control) |
IDropTarget.OnDragEnter(DragEventArgs) |
引發 DragEnter 事件。 (繼承來源 Control) |
IDropTarget.OnDragLeave(EventArgs) |
引發 DragLeave 事件。 (繼承來源 Control) |
IDropTarget.OnDragOver(DragEventArgs) |
引發 DragOver 事件。 (繼承來源 Control) |