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 窗体,一个包含两DataTable个 DataSet 对象的 ,以及一个关联这两个DataRelation表的 。 为了显示数据,System.Windows.Forms.DataGrid然后通过 SetDataBinding 方法将 控件绑定到 DataSet 。 窗体上的按钮通过创建两 DataGridTableStyle 个 对象并将每个 对象的 设置为 MappingName 其中一个 TableNameDataTable 对象的 来更改网格的外观。 该示例还包含 事件中的 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 方法将 DataSource 和 DataMember 属性设置为有效的数据源。 以下数据源有效:
一个 DataTable
一个 DataView
一个 DataSet
单个维度数组
实现 IListSource 接口的任何组件
实现 IList 接口的任何组件
有关 类的详细信息 DataSet ,请参阅 DataSets、DataTables 和 DataViews。
可以创建一个网格,使用户能够编辑数据,但通过将 用作数据源并将 属性设置为 AllowNewfalse
来阻止他们添加新行DataView。
数据源由 BindingManagerBase 对象进一步管理。 对于数据源中的每个表, BindingManagerBase 可以从窗体的 BindingContext返回 。 例如,可以通过返回关联的 BindingManagerBase 对象的 属性来确定数据源包含的 Count 行数。
若要验证数据,请使用表示数据及其事件的基础对象。 例如,如果数据来自 DataTable 中的 DataSet,请使用 ColumnChanging 和 RowChanging 事件。
注意
由于可以通过添加或删除 () 的成员GridColumnStylesCollection来自定义列数,并且可以按列对行进行排序,RowNumber因此无法保证 和 ColumnNumber 属性值与 中的 DataTable和 DataColumn 索引相对应DataRow。 因此,应避免在 事件中 Validating 使用这些属性来验证数据。
若要确定所选单元格,请使用 CurrentCell 属性。 使用 Item[] 属性更改任何单元格的值,该属性可以采用单元格的行和列索引或单个 DataGridCell。 监视事件以 CurrentCellChanged 检测用户何时选择另一个单元格。
若要确定用户单击的控件的哪个部分,请在 事件中使用 HitTest 方法 MouseDown 。 方法 HitTest 返回一个 DataGrid.HitTestInfo 对象,该对象包含单击区域的行和列。
若要在运行时管理控件的外观,可以使用多个属性来设置颜色和描述文字属性,包括 CaptionForeColor、 CaptionBackColorCaptionFont、 等。
可以通过创建 DataGridTableStyle 对象并将其添加到 GridTableStylesCollection,进一步修改显示网格 (或网格) 的外观,该对象可通过 TableStyles 属性访问。 例如,如果将 DataSource 设置为包含三DataTable个 DataSet 对象的 ,则可以将三DataGridTableStyle个 对象添加到集合,每个表一个对象。 若要将每个 DataGridTableStyle 对象与 DataTable同步,请将 的 DataGridTableStyle 设置为 MappingNameTableName 的 DataTable。 有关绑定到对象数组的详细信息,请参阅 DataGridTableStyle.MappingName 属性。
若要创建表的自定义视图,请创建 或 类的DataGridTextBoxColumn实例,并将 对象添加到GridTableStylesCollection通过 属性访问的 TableStyles 。DataGridBoolColumn 这两个类均从 DataGridColumnStyle 继承。 对于每个列样式,请将 MappingName 要 ColumnName 显示在网格中的列的 设置为 。 若要隐藏列,请将其 MappingName 设置为有效 ColumnName以外的其他值。
若要设置列文本的格式,请将 的 DataGridTextBoxColumn 属性设置为Format格式设置类型和自定义日期和时间格式字符串中找到的值之一。
若要将 DataGrid 绑定到对象的强类型数组,该对象类型必须包含公共属性。 若要创建 DataGridTableStyle 显示数组的 ,请将 DataGridTableStyle.MappingName 属性设置为 typename[]
,其中 typename
替换为对象类型的名称。 另请注意, MappingName 属性区分大小写;类型名称必须完全匹配。 有关示例, MappingName 请参阅 属性。
还可以将 DataGridArrayList绑定到 。 的 ArrayList 一个功能是它可以包含多个类型的 对象,但 DataGrid 仅当列表中的所有项都与第一项属于同一类型时, 才能绑定到此类列表。 这意味着所有对象必须属于同一类型,或者它们必须继承自与列表中的第一项相同的类。 例如,如果列表中的第一项 Control是 ,则第二项 TextBox 可能是继承自 Control) 的 (。 另一方面,如果第一项 TextBox为 ,则第二个对象不能为 Control。 此外, ArrayList 绑定时中必须包含项。 空 ArrayList 将导致空网格。 此外, 中的 ArrayList 对象必须包含公共属性。 绑定到 时,ArrayList将 的 DataGridTableStyle 设置为MappingName“ArrayList”, (类型名称) 。
对于每个 DataGridTableStyle,可以设置颜色和描述文字属性来替代控件的设置System.Windows.Forms.DataGrid。 但是,如果未设置这些属性,则默认使用控件的设置。 以下属性可由属性重写 DataGridTableStyle :
若要自定义各个列的外观,请将 对象添加到 DataGridColumnStyleGridColumnStylesCollection,可通过 GridColumnStyles 每个 DataGridTableStyle的 属性访问。 若要将每个 DataGridColumnStyle 与 DataColumn 中的 DataTable同步,请将 设置为 MappingNameColumnName 的 DataColumn。 构造 时, DataGridColumnStyle还可以设置指定列显示数据的方式的格式字符串。 例如,可以指定列使用短日期格式来显示表中包含的日期。
注意
在将 对象添加到 之前,GridColumnStylesCollection请始终创建DataGridColumnStyle对象并将其添加到 。GridTableStylesCollectionDataGridTableStyle 将具有有效MappingName值的空DataGridTableStyle添加到集合时,DataGridColumnStyle将自动生成对象。 因此,如果尝试将具有重复MappingName值的新DataGridColumnStyle对象添加到 ,GridColumnStylesCollection则会引发异常。
注意
DataGridView 控件取代了 DataGrid 控件并添加了功能;但是,可以选择保留 DataGrid 控件以实现向后兼容并供将来使用。 有关详细信息,请参阅 Windows 窗体 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 |
获取控件下边缘与其容器的工作区上边缘之间的距离(以像素为单位)。 (继承自 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 |
获取或设置具有焦点的单元格。 设计时不可用。 |
CurrentRowIndex |
获取或设置当前具有焦点的行的索引。 |
Cursor |
此成员对于此控件无意义。 |
DataBindings |
为该控件获取数据绑定。 (继承自 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 |
获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重绘其图面,以减少或避免闪烁。 (继承自 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 |
获取或设置控件左边缘与其容器的工作区左边缘之间的距离(以像素为单位)。 (继承自 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 |
获取控件右边缘与其容器的工作区左边缘之间的距离(以像素为单位)。 (继承自 Control) |
RightToLeft |
获取或设置一个值,该值指示是否将控件的元素对齐以支持使用从右向左的字体的区域设置。 (继承自 Control) |
RowHeadersVisible |
获取或设置一个值,该值指定行标题是否可见。 |
RowHeaderWidth |
获取或设置行标题宽度。 |
ScaleChildren |
获取一个值,该值确定子控件的缩放。 (继承自 Control) |
SelectionBackColor |
获取或设置选定行的背景色。 |
SelectionForeColor |
获取或设置选定行的前景色。 |
ShowFocusCues |
获取一个值,该值指示控件是否应显示聚焦框。 (继承自 Control) |
ShowKeyboardCues |
获取一个值,该值指示用户界面是否处于适当的状态以显示或隐藏键盘快捷键。 (继承自 Control) |
Site |
获取或设置控件的站点。 |
Size |
获取或设置控件的高度和宽度。 (继承自 Control) |
TabIndex |
获取或设置控件在其容器内的 Tab 键顺序。 (继承自 Control) |
TableStyles |
获取网格的 DataGridTableStyle 对象的集合。 |
TabStop |
获取或设置一个值,该值指示用户能否使用 Tab 键将焦点放到该控件上。 (继承自 Control) |
Tag |
获取或设置包含有关控件的数据的对象。 (继承自 Control) |
Text |
此成员对于此控件无意义。 |
Top |
获取或设置控件上边缘与其容器的工作区上边缘之间的距离(以像素为单位)。 (继承自 Control) |
TopLevelControl |
获取没有另一个 Windows 窗体控件作为其父级的父控件。 通常,这是控件所在的最外面的 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) |