DataTable Класс

Определение

Представляет одну таблицу данных в памяти.

public ref class DataTable : System::ComponentModel::MarshalByValueComponent, System::ComponentModel::IListSource, System::ComponentModel::ISupportInitialize, System::ComponentModel::ISupportInitializeNotification, System::Runtime::Serialization::ISerializable, System::Xml::Serialization::IXmlSerializable
public ref class DataTable
public ref class DataTable : System::ComponentModel::MarshalByValueComponent, System::ComponentModel::IListSource, System::ComponentModel::ISupportInitialize, System::Runtime::Serialization::ISerializable
public ref class DataTable : System::ComponentModel::MarshalByValueComponent, System::ComponentModel::IListSource, System::ComponentModel::ISupportInitializeNotification, System::Runtime::Serialization::ISerializable, System::Xml::Serialization::IXmlSerializable
public class DataTable : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource, System.ComponentModel.ISupportInitialize, System.ComponentModel.ISupportInitializeNotification, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
public class DataTable
[System.Serializable]
public class DataTable : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource, System.ComponentModel.ISupportInitialize, System.Runtime.Serialization.ISerializable
[System.Serializable]
public class DataTable : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource, System.ComponentModel.ISupportInitializeNotification, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
public class DataTable : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource, System.ComponentModel.ISupportInitializeNotification, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
type DataTable = class
    inherit MarshalByValueComponent
    interface IListSource
    interface ISupportInitialize
    interface ISupportInitializeNotification
    interface ISerializable
    interface IXmlSerializable
type DataTable = class
[<System.Serializable>]
type DataTable = class
    inherit MarshalByValueComponent
    interface IListSource
    interface ISupportInitialize
    interface ISerializable
[<System.Serializable>]
type DataTable = class
    inherit MarshalByValueComponent
    interface IListSource
    interface ISupportInitializeNotification
    interface ISupportInitialize
    interface ISerializable
    interface IXmlSerializable
[<System.Serializable>]
type DataTable = class
    inherit MarshalByValueComponent
    interface IListSource
    interface ISupportInitializeNotification
    interface ISerializable
    interface IXmlSerializable
    interface ISupportInitialize
Public Class DataTable
Inherits MarshalByValueComponent
Implements IListSource, ISerializable, ISupportInitialize, ISupportInitializeNotification, IXmlSerializable
Public Class DataTable
Public Class DataTable
Inherits MarshalByValueComponent
Implements IListSource, ISerializable, ISupportInitialize
Public Class DataTable
Inherits MarshalByValueComponent
Implements IListSource, ISerializable, ISupportInitializeNotification, IXmlSerializable
Наследование
Наследование
DataTable
Производный
Атрибуты
Реализации

Примеры

В следующем примере создаются два объекта DataTable и один DataRelation объект, а затем добавляются новые объекты в DataSet . Таблицы затем отображаются в DataGridView элементе управления.

// Put the next line into the Declarations section.
private System.Data.DataSet dataSet;

private void MakeDataTables()
{
    // Run all of the functions.
    MakeParentTable();
    MakeChildTable();
    MakeDataRelation();
    BindToDataGrid();
}

private void MakeParentTable()
{
    // Create a new DataTable.
    System.Data.DataTable table = new DataTable("ParentTable");
    // Declare variables for DataColumn and DataRow objects.
    DataColumn column;
    DataRow row;

    // Create new DataColumn, set DataType,
    // ColumnName and add to DataTable.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    column.ReadOnly = true;
    column.Unique = true;
    // Add the Column to the DataColumnCollection.
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "ParentItem";
    column.AutoIncrement = false;
    column.Caption = "ParentItem";
    column.ReadOnly = false;
    column.Unique = false;
    // Add the column to the table.
    table.Columns.Add(column);

    // Make the ID column the primary key column.
    DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = table.Columns["id"];
    table.PrimaryKey = PrimaryKeyColumns;

    // Instantiate the DataSet variable.
    dataSet = new DataSet();
    // Add the new DataTable to the DataSet.
    dataSet.Tables.Add(table);

    // Create three new DataRow objects and add
    // them to the DataTable
    for (int i = 0; i<= 2; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["ParentItem"] = "ParentItem " + i;
        table.Rows.Add(row);
    }
}

private void MakeChildTable()
{
    // Create a new DataTable.
    DataTable table = new DataTable("childTable");
    DataColumn column;
    DataRow row;

    // Create first column and add to the DataTable.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ChildID";
    column.AutoIncrement = true;
    column.Caption = "ID";
    column.ReadOnly = true;
    column.Unique = true;

    // Add the column to the DataColumnCollection.
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.String");
    column.ColumnName = "ChildItem";
    column.AutoIncrement = false;
    column.Caption = "ChildItem";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);

    // Create third column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ParentID";
    column.AutoIncrement = false;
    column.Caption = "ParentID";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);

    dataSet.Tables.Add(table);

    // Create three sets of DataRow objects,
    // five rows each, and add to DataTable.
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 0 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 5;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 1 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 10;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 2 ;
        table.Rows.Add(row);
    }
}

private void MakeDataRelation()
{
    // DataRelation requires two DataColumn
    // (parent and child) and a name.
    DataColumn parentColumn =
        dataSet.Tables["ParentTable"].Columns["id"];
    DataColumn childColumn =
        dataSet.Tables["ChildTable"].Columns["ParentID"];
    DataRelation relation = new
        DataRelation("parent2Child", parentColumn, childColumn);
    dataSet.Tables["ChildTable"].ParentRelations.Add(relation);
}

private void BindToDataGrid()
{
    // Instruct the DataGrid to bind to the DataSet, with the
    // ParentTable as the topmost DataTable.
    dataGrid1.SetDataBinding(dataSet,"ParentTable");
}
' Put the next line into the Declarations section.
private dataSet As DataSet 
 
Private Sub MakeDataTables()
    ' Run all of the functions. 
    MakeParentTable()
    MakeChildTable()
    MakeDataRelation()
    BindToDataGrid()
End Sub
 
Private Sub MakeParentTable()
    ' Create a new DataTable.
    Dim table As New DataTable("ParentTable")

    ' Declare variables for DataColumn and DataRow objects.
    Dim column As DataColumn 
    Dim row As DataRow 
 
    ' Create new DataColumn, set DataType, ColumnName 
    ' and add to DataTable.    
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.Int32")
    column.ColumnName = "id"
    column.ReadOnly = True
    column.Unique = True

    ' Add the Column to the DataColumnCollection.
    table.Columns.Add(column)
 
    ' Create second column.
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.String")
    column.ColumnName = "ParentItem"
    column.AutoIncrement = False
    column.Caption = "ParentItem"
    column.ReadOnly = False
    column.Unique = False

    ' Add the column to the table.
    table.Columns.Add(column)
 
    ' Make the ID column the primary key column.
    Dim PrimaryKeyColumns(0) As DataColumn
    PrimaryKeyColumns(0)= table.Columns("id")
    table.PrimaryKey = PrimaryKeyColumns
 
    ' Instantiate the DataSet variable.
    dataSet = New DataSet()

    ' Add the new DataTable to the DataSet.
    dataSet.Tables.Add(table)
 
    ' Create three new DataRow objects and add 
    ' them to the DataTable
    Dim i As Integer
    For i = 0 to 2
       row = table.NewRow()
       row("id") = i
       row("ParentItem") = "ParentItem " + i.ToString()
       table.Rows.Add(row)
    Next i
End Sub
 
Private Sub MakeChildTable()
    ' Create a new DataTable.
    Dim table As New DataTable("childTable")
    Dim column As DataColumn 
    Dim row As DataRow 
 
    ' Create first column and add to the DataTable.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.Int32")
    column.ColumnName = "ChildID"
    column.AutoIncrement = True
    column.Caption = "ID"
    column.ReadOnly = True
    column.Unique = True

    ' Add the column to the DataColumnCollection.
    table.Columns.Add(column)
 
    ' Create second column.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.String")
    column.ColumnName = "ChildItem"
    column.AutoIncrement = False
    column.Caption = "ChildItem"
    column.ReadOnly = False
    column.Unique = False
    table.Columns.Add(column)
 
    ' Create third column.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.Int32")
    column.ColumnName = "ParentID"
    column.AutoIncrement = False
    column.Caption = "ParentID"
    column.ReadOnly = False
    column.Unique = False
    table.Columns.Add(column)
 
    dataSet.Tables.Add(table)

    ' Create three sets of DataRow objects, five rows each, 
    ' and add to DataTable.
    Dim i As Integer
    For i = 0 to 4
       row = table.NewRow()
       row("childID") = i
       row("ChildItem") = "Item " + i.ToString()
       row("ParentID") = 0 
       table.Rows.Add(row)
    Next i
    For i = 0 to 4
       row = table.NewRow()
       row("childID") = i + 5
       row("ChildItem") = "Item " + i.ToString()
       row("ParentID") = 1 
       table.Rows.Add(row)
    Next i
    For i = 0 to 4
       row = table.NewRow()
       row("childID") = i + 10
       row("ChildItem") = "Item " + i.ToString()
       row("ParentID") = 2 
       table.Rows.Add(row)
    Next i
End Sub
 
Private Sub MakeDataRelation()
    ' DataRelation requires two DataColumn 
    ' (parent and child) and a name.
    Dim parentColumn As DataColumn = _
        dataSet.Tables("ParentTable").Columns("id")
    Dim childColumn As DataColumn = _
        dataSet.Tables("ChildTable").Columns("ParentID")
    Dim relation As DataRelation = new _
        DataRelation("parent2Child", parentColumn, childColumn)
    dataSet.Tables("ChildTable").ParentRelations.Add(relation)
End Sub
 
Private Sub BindToDataGrid()
    ' Instruct the DataGrid to bind to the DataSet, with the 
    ' ParentTable as the topmost DataTable.
    DataGrid1.SetDataBinding(dataSet,"ParentTable")
End Sub

В этом примере показано, как создать таблицу данных вручную с конкретными определениями схемы:

  • Создайте несколько таблиц DataTable и определите начальные столбцы.

  • Создайте ограничения таблицы.

  • Вставьте значения и отобразите таблицы.

  • Создайте столбцы выражений и отобразите таблицы.

проекты C# и Visual Basic с этим примером кода можно найти в примерах кода для разработчиков.

using System;
using System.Data;

class Program {
   static void Main(string[] args) {
      // Create two tables and add them into the DataSet
      DataTable orderTable = CreateOrderTable();
      DataTable orderDetailTable = CreateOrderDetailTable();
      DataSet salesSet = new DataSet();
      salesSet.Tables.Add(orderTable);
      salesSet.Tables.Add(orderDetailTable);

      // Set the relations between the tables and create the related constraint.
      salesSet.Relations.Add("OrderOrderDetail", orderTable.Columns["OrderId"], orderDetailTable.Columns["OrderId"], true);

      Console.WriteLine("After creating the foreign key constriant, you will see the following error if inserting order detail with the wrong OrderId: ");
      try {
         DataRow errorRow = orderDetailTable.NewRow();
         errorRow[0] = 1;
         errorRow[1] = "O0007";
         orderDetailTable.Rows.Add(errorRow);
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
      Console.WriteLine();

      // Insert the rows into the table
      InsertOrders(orderTable);
      InsertOrderDetails(orderDetailTable);

      Console.WriteLine("The initial Order table.");
      ShowTable(orderTable);

      Console.WriteLine("The OrderDetail table.");
      ShowTable(orderDetailTable);

      // Use the Aggregate-Sum on the child table column to get the result.
      DataColumn colSub = new DataColumn("SubTotal", typeof(Decimal), "Sum(Child.LineTotal)");
      orderTable.Columns.Add(colSub);

      // Compute the tax by referencing the SubTotal expression column.
      DataColumn colTax = new DataColumn("Tax", typeof(Decimal), "SubTotal*0.1");
      orderTable.Columns.Add(colTax);

      // If the OrderId is 'Total', compute the due on all orders; or compute the due on this order.
      DataColumn colTotal = new DataColumn("TotalDue", typeof(Decimal), "IIF(OrderId='Total',Sum(SubTotal)+Sum(Tax),SubTotal+Tax)");
      orderTable.Columns.Add(colTotal);

      DataRow row = orderTable.NewRow();
      row["OrderId"] = "Total";
      orderTable.Rows.Add(row);

      Console.WriteLine("The Order table with the expression columns.");
      ShowTable(orderTable);

      Console.WriteLine("Press any key to exit.....");
      Console.ReadKey();
   }

   private static DataTable CreateOrderTable() {
      DataTable orderTable = new DataTable("Order");

      // Define one column.
      DataColumn colId = new DataColumn("OrderId", typeof(String));
      orderTable.Columns.Add(colId);

      DataColumn colDate = new DataColumn("OrderDate", typeof(DateTime));
      orderTable.Columns.Add(colDate);

      // Set the OrderId column as the primary key.
      orderTable.PrimaryKey = new DataColumn[] { colId };

      return orderTable;
   }

   private static DataTable CreateOrderDetailTable() {
      DataTable orderDetailTable = new DataTable("OrderDetail");

      // Define all the columns once.
      DataColumn[] cols ={
                                  new DataColumn("OrderDetailId",typeof(Int32)),
                                  new DataColumn("OrderId",typeof(String)),
                                  new DataColumn("Product",typeof(String)),
                                  new DataColumn("UnitPrice",typeof(Decimal)),
                                  new DataColumn("OrderQty",typeof(Int32)),
                                  new DataColumn("LineTotal",typeof(Decimal),"UnitPrice*OrderQty")
                              };

      orderDetailTable.Columns.AddRange(cols);
      orderDetailTable.PrimaryKey = new DataColumn[] { orderDetailTable.Columns["OrderDetailId"] };
     return orderDetailTable;
   }

   private static void InsertOrders(DataTable orderTable) {
      // Add one row once.
      DataRow row1 = orderTable.NewRow();
      row1["OrderId"] = "O0001";
      row1["OrderDate"] = new DateTime(2013, 3, 1);
      orderTable.Rows.Add(row1);

      DataRow row2 = orderTable.NewRow();
      row2["OrderId"] = "O0002";
      row2["OrderDate"] = new DateTime(2013, 3, 12);
      orderTable.Rows.Add(row2);

      DataRow row3 = orderTable.NewRow();
      row3["OrderId"] = "O0003";
      row3["OrderDate"] = new DateTime(2013, 3, 20);
      orderTable.Rows.Add(row3);
   }

   private static void InsertOrderDetails(DataTable orderDetailTable) {
      // Use an Object array to insert all the rows .
      // Values in the array are matched sequentially to the columns, based on the order in which they appear in the table.
      Object[] rows = {
                                 new Object[]{1,"O0001","Mountain Bike",1419.5,36},
                                 new Object[]{2,"O0001","Road Bike",1233.6,16},
                                 new Object[]{3,"O0001","Touring Bike",1653.3,32},
                                 new Object[]{4,"O0002","Mountain Bike",1419.5,24},
                                 new Object[]{5,"O0002","Road Bike",1233.6,12},
                                 new Object[]{6,"O0003","Mountain Bike",1419.5,48},
                                 new Object[]{7,"O0003","Touring Bike",1653.3,8},
                             };

      foreach (Object[] row in rows) {
         orderDetailTable.Rows.Add(row);
      }
   }

   private static void ShowTable(DataTable table) {
      foreach (DataColumn col in table.Columns) {
         Console.Write("{0,-14}", col.ColumnName);
      }
      Console.WriteLine();

      foreach (DataRow row in table.Rows) {
         foreach (DataColumn col in table.Columns) {
            if (col.DataType.Equals(typeof(DateTime)))
               Console.Write("{0,-14:d}", row[col]);
            else if (col.DataType.Equals(typeof(Decimal)))
               Console.Write("{0,-14:C}", row[col]);
            else
               Console.Write("{0,-14}", row[col]);
         }
         Console.WriteLine();
      }
      Console.WriteLine();
   }
}
Imports System.Data

Class Program
   Public Shared Sub Main(args As String())
      ' Create two tables and add them into the DataSet
      Dim orderTable As DataTable = CreateOrderTable()
      Dim orderDetailTable As DataTable = CreateOrderDetailTable()
      Dim salesSet As New DataSet()
      salesSet.Tables.Add(orderTable)
      salesSet.Tables.Add(orderDetailTable)

      ' Set the relations between the tables and create the related constraint.
      salesSet.Relations.Add("OrderOrderDetail", orderTable.Columns("OrderId"), orderDetailTable.Columns("OrderId"), True)

      Console.WriteLine("After creating the foreign key constriant, you will see the following error if inserting order detail with the wrong OrderId: ")
      Try
         Dim errorRow As DataRow = orderDetailTable.NewRow()
         errorRow(0) = 1
         errorRow(1) = "O0007"
         orderDetailTable.Rows.Add(errorRow)
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
      Console.WriteLine()

      ' Insert the rows into the table
      InsertOrders(orderTable)
      InsertOrderDetails(orderDetailTable)

      Console.WriteLine("The initial Order table.")
      ShowTable(orderTable)

      Console.WriteLine("The OrderDetail table.")
      ShowTable(orderDetailTable)

      ' Use the Aggregate-Sum on the child table column to get the result.
      Dim colSub As New DataColumn("SubTotal", GetType([Decimal]), "Sum(Child.LineTotal)")
      orderTable.Columns.Add(colSub)

      ' Compute the tax by referencing the SubTotal expression column.
      Dim colTax As New DataColumn("Tax", GetType([Decimal]), "SubTotal*0.1")
      orderTable.Columns.Add(colTax)

      ' If the OrderId is 'Total', compute the due on all orders; or compute the due on this order.
      Dim colTotal As New DataColumn("TotalDue", GetType([Decimal]), "IIF(OrderId='Total',Sum(SubTotal)+Sum(Tax),SubTotal+Tax)")
      orderTable.Columns.Add(colTotal)

      Dim row As DataRow = orderTable.NewRow()
      row("OrderId") = "Total"
      orderTable.Rows.Add(row)

      Console.WriteLine("The Order table with the expression columns.")
      ShowTable(orderTable)

      Console.WriteLine("Press any key to exit.....")
      Console.ReadKey()
   End Sub

   Private Shared Function CreateOrderTable() As DataTable
      Dim orderTable As New DataTable("Order")

      ' Define one column.
      Dim colId As New DataColumn("OrderId", GetType([String]))
      orderTable.Columns.Add(colId)

      Dim colDate As New DataColumn("OrderDate", GetType(DateTime))
      orderTable.Columns.Add(colDate)

      ' Set the OrderId column as the primary key.
      orderTable.PrimaryKey = New DataColumn() {colId}

      Return orderTable
   End Function

   Private Shared Function CreateOrderDetailTable() As DataTable
      Dim orderDetailTable As New DataTable("OrderDetail")

      ' Define all the columns once.
      Dim cols As DataColumn() = {New DataColumn("OrderDetailId", GetType(Int32)), New DataColumn("OrderId", GetType([String])), New DataColumn("Product", GetType([String])), New DataColumn("UnitPrice", GetType([Decimal])), New DataColumn("OrderQty", GetType(Int32)), New DataColumn("LineTotal", GetType([Decimal]), "UnitPrice*OrderQty")}

      orderDetailTable.Columns.AddRange(cols)
      orderDetailTable.PrimaryKey = New DataColumn() {orderDetailTable.Columns("OrderDetailId")}
      Return orderDetailTable
   End Function

   Private Shared Sub InsertOrders(orderTable As DataTable)
      ' Add one row once.
      Dim row1 As DataRow = orderTable.NewRow()
      row1("OrderId") = "O0001"
      row1("OrderDate") = New DateTime(2013, 3, 1)
      orderTable.Rows.Add(row1)

      Dim row2 As DataRow = orderTable.NewRow()
      row2("OrderId") = "O0002"
      row2("OrderDate") = New DateTime(2013, 3, 12)
      orderTable.Rows.Add(row2)

      Dim row3 As DataRow = orderTable.NewRow()
      row3("OrderId") = "O0003"
      row3("OrderDate") = New DateTime(2013, 3, 20)
      orderTable.Rows.Add(row3)
   End Sub

   Private Shared Sub InsertOrderDetails(orderDetailTable As DataTable)
      ' Use an Object array to insert all the rows .
      ' Values in the array are matched sequentially to the columns, based on the order in which they appear in the table.
      Dim rows As [Object]() = {New [Object]() {1, "O0001", "Mountain Bike", 1419.5, 36}, New [Object]() {2, "O0001", "Road Bike", 1233.6, 16}, New [Object]() {3, "O0001", "Touring Bike", 1653.3, 32}, New [Object]() {4, "O0002", "Mountain Bike", 1419.5, 24}, New [Object]() {5, "O0002", "Road Bike", 1233.6, 12}, New [Object]() {6, "O0003", "Mountain Bike", 1419.5, 48}, _
         New [Object]() {7, "O0003", "Touring Bike", 1653.3, 8}}

      For Each row As [Object]() In rows
         orderDetailTable.Rows.Add(row)
      Next
   End Sub

   Private Shared Sub ShowTable(table As DataTable)
      For Each col As DataColumn In table.Columns
         Console.Write("{0,-14}", col.ColumnName)
      Next
      Console.WriteLine()

      For Each row As DataRow In table.Rows
         For Each col As DataColumn In table.Columns
            If col.DataType.Equals(GetType(DateTime)) Then
               Console.Write("{0,-14:d}", row(col))
            ElseIf col.DataType.Equals(GetType([Decimal])) Then
               Console.Write("{0,-14:C}", row(col))
            Else
               Console.Write("{0,-14}", row(col))
            End If
         Next
         Console.WriteLine()
      Next
      Console.WriteLine()
   End Sub
End Class

Комментарии

DataTableявляется центральным объектом в библиотеке ADO.NET. Другие объекты, использующие, DataTable включают DataSet и DataView .

При доступе к DataTable объектам Обратите внимание, что они чувствительны к регистру. Например, если один DataTable из них имеет имя «Mydatatable», а другой — «Mydatatable», то строка, используемая для поиска одной из таблиц, считается с учетом регистра. Однако если "Mydatatable" существует, а "Mydatatable" — нет, то строка поиска считается нечувствительной к регистру. DataSetМожет содержать два DataTable объекта с одинаковым TableName значением свойства, но разными Namespace значениями свойств. Дополнительные сведения о работе с DataTable объектами см. в разделе Создание таблицыданных.

Если вы создаете DataTable программно, необходимо сначала определить его схему, добавив DataColumn объекты в объект DataColumnCollection (доступ к которому осуществляется через Columns свойство). Дополнительные сведения о добавлении DataColumn объектов см. в разделе Добавление столбцов в таблицуданных.

Чтобы добавить строки в DataTable , необходимо сначала использовать NewRow метод для возврата нового DataRow объекта. NewRowМетод возвращает строку со схемой DataTable , так как она определена в таблице DataColumnCollection . Максимальное число строк, которое DataTable может храниться в, — 16 777 216. Дополнительные сведения см. в разделе Добавление данных в таблицу DataTable.

Объект DataTable также содержит коллекцию Constraint объектов, которые можно использовать для обеспечения целостности данных. Дополнительные сведения см. в разделе ограничения DataTable.

Существует много DataTable событий, которые можно использовать для определения времени внесения изменений в таблицу. К ним относятся RowChanged, RowChanging, RowDeleting и RowDeleted. Дополнительные сведения о событиях, которые можно использовать с DataTable , см. в разделе Обработка событий DataTable.

При DataTable создании экземпляра для некоторых свойств чтения и записи задаются начальные значения. Список этих значений см DataTable.DataTable . в разделе конструктора.

Примечание

DataSetобъекты и DataTable наследуются от MarshalByValueComponent и поддерживают ISerializable интерфейс для платформа .NET Framework удаленного взаимодействия. это единственные ADO.NET объекты, которые можно использовать для удаленного взаимодействия платформа .NET Framework.

Замечания по безопасности

Сведения о наборах данных и безопасности DataTable см. в руководстве по безопасности.

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

DataTable()

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

DataTable(SerializationInfo, StreamingContext)

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

DataTable(String)

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

DataTable(String, String)

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

Поля

fInitInProgress

Проверяет, выполняется ли инициализация. Инициализация происходит во время выполнения.

Свойства

CaseSensitive

Показывает, учитывается ли регистр при сравнении строк в таблице.

ChildRelations

Получает коллекцию дочерних отношений для объекта DataTable.

Columns

Получает коллекцию столбцов, принадлежащих данной таблице.

Constraints

Получает коллекцию ограничений, содержащихся в данной таблице.

Container

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

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

Получает класс DataSet, к которому принадлежит данная таблица.

DefaultView

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

DesignMode

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

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

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

Events

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

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

Получает коллекцию настраиваемых пользовательских сведений.

HasErrors

Получает значение, указывающее наличие ошибок в строках таблиц класса DataSet, к которому принадлежат таблицы.

IsInitialized

Получает значение, указывающее, инициализирована ли таблица DataTable.

Locale

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

MinimumCapacity

Возвращает или задает начальный размер таблицы.

Namespace

Возвращает или задает пространство имен для представления данных объекта DataTable в формате XML.

ParentRelations

Получает коллекцию родительских отношений для объекта DataTable.

Prefix

Возвращает или задает пространство имен для представления данных объекта DataTable в формате XML.

PrimaryKey

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

RemotingFormat

Возвращает или задает формат сериализации.

Rows

Получает коллекцию строк, принадлежащих данной таблице.

Site

Возвращает или задает тип ISite для объекта DataTable.

TableName

Возвращает или задает имя таблицы для объекта DataTable.

Методы

AcceptChanges()

Фиксирует все изменения, внесенные в таблицу после последнего вызова метода AcceptChanges().

BeginInit()

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

BeginLoadData()

Отключает уведомления, ведение индексов и ограничения в процессе загрузки данных.

Clear()

Очищает DataTable от всех данных.

Clone()

Копирует структуру объекта DataTable, включая все схемы и ограничения DataTable.

Compute(String, String)

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

Copy()

Копирует структуру и данные для DataTable.

CreateDataReader()

Возвращает объект DataTableReader, соответствующий данным в этой таблице DataTable.

CreateInstance()

Создает новый экземпляр DataTable.

Dispose()

Освобождает все ресурсы, занятые модулем MarshalByValueComponent.

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

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

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

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

EndLoadData()

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

Equals(Object)

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

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

Получает копию таблицы DataTable, содержащую все изменения, внесенные после ее загрузки или после последнего вызова метода AcceptChanges().

GetChanges(DataRowState)

Получает копию таблицы DataTable, содержащую все изменения, внесенные после ее последней загрузки или после вызова метода AcceptChanges() и отфильтрованные по параметру DataRowState.

GetDataTableSchema(XmlSchemaSet)

Этот метод возвращает экземпляр XmlSchemaSet, содержащий язык описания веб-служб (WSDL), который описывает объект DataTable для веб-служб.

GetErrors()

Получает массив объектов DataRow, содержащих ошибки.

GetHashCode()

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

(Унаследовано от Object)
GetObjectData(SerializationInfo, StreamingContext)

Заполняет объект сведений о сериализации данными, необходимыми для сериализации DataTable.

GetRowType()

Получает тип строки.

GetSchema()

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

GetService(Type)

Возвращает средство реализации объекта IServiceProvider.

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

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

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

Копирует объект DataRow в DataTable, сохраняя все параметры свойств, а также текущие и исходные значения.

Load(IDataReader)

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

Load(IDataReader, LoadOption)

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

Load(IDataReader, LoadOption, FillErrorEventHandler)

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

LoadDataRow(Object[], Boolean)

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

LoadDataRow(Object[], LoadOption)

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

MemberwiseClone()

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

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

Объединяет заданный объект DataTable с текущим объектом DataTable.

Merge(DataTable, Boolean)

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

Merge(DataTable, Boolean, MissingSchemaAction)

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

NewRow()

Создает новый класс DataRow, имеющий ту же схему, что и таблица.

NewRowArray(Int32)

Возвращает массив DataRow.

NewRowFromBuilder(DataRowBuilder)

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

OnColumnChanged(DataColumnChangeEventArgs)

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

OnColumnChanging(DataColumnChangeEventArgs)

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

OnPropertyChanging(PropertyChangedEventArgs)

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

OnRemoveColumn(DataColumn)

Сообщает классу DataTable об удалении объекта DataColumn.

OnRowChanged(DataRowChangeEventArgs)

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

OnRowChanging(DataRowChangeEventArgs)

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

OnRowDeleted(DataRowChangeEventArgs)

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

OnRowDeleting(DataRowChangeEventArgs)

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

OnTableCleared(DataTableClearEventArgs)

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

OnTableClearing(DataTableClearEventArgs)

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

OnTableNewRow(DataTableNewRowEventArgs)

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

ReadXml(Stream)

Считывает XML-схему и данные в DataTable, используя указанный класс Stream.

ReadXml(String)

Читает данные и схему XML в DataTable из указанного файла.

ReadXml(TextReader)

Считывает XML-схему и данные в DataTable, используя указанный класс TextReader.

ReadXml(XmlReader)

Читает данные и схему XML в DataTable, используя указанное средство чтения XmlReader.

ReadXmlSchema(Stream)

Считывает XML-схему в DataTable, используя указанный поток.

ReadXmlSchema(String)

Считывает XML-схему из указанного файла в таблицу DataTable.

ReadXmlSchema(TextReader)

Считывает XML-схему в DataTable, используя указанный объект TextReader.

ReadXmlSchema(XmlReader)

Считывает XML-схему в DataTable, используя указанный объект XmlReader.

ReadXmlSerializable(XmlReader)

Считывает из XML-потока.

RejectChanges()

Выполняется откат всех изменений, внесенных в таблицу с момента ее загрузки или после последнего вызова метода AcceptChanges().

Reset()

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

Select()

Получает массив всех объектов DataRow.

Select(String)

Получает массив всех объектов DataRow, отвечающих условиям фильтра.

Select(String, String)

Получает массив всех объектов DataRow, отвечающих условиям фильтра, согласно указанному порядку сортировки.

Select(String, String, DataViewRowState)

Получает массив всех объектов DataRow, отвечающих условиям фильтра, согласно порядку сортировки, соответствующему указанному состоянию.

ToString()

Получает свойства TableName и DisplayExpression, если существует сцепленная строка.

ToString()

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

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

Записывает текущее содержимое DataTable как XML с использованием указанного элемента Stream.

WriteXml(Stream, Boolean)

Записывает текущее содержимое DataTable как XML с использованием указанного элемента Stream. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXml(Stream, XmlWriteMode)

Записывает текущие данные и по возможности схему для DataTable в указанный файл с помощью заданного объекта XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema.

WriteXml(Stream, XmlWriteMode, Boolean)

Записывает текущие данные и по возможности схему для DataTable в указанный файл с помощью заданного объекта XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXml(String)

Записывает текущее содержимое таблицы DataTable в формате XML, используя указанный файл.

WriteXml(String, Boolean)

Записывает текущее содержимое таблицы DataTable в формате XML, используя указанный файл. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXml(String, XmlWriteMode)

Записывает текущие данные и по возможности схему для DataTable, используя указанный файл и заданное перечисление XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema.

WriteXml(String, XmlWriteMode, Boolean)

Записывает текущие данные и по возможности схему для DataTable, используя указанный файл и заданное перечисление XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXml(TextWriter)

Записывает текущее содержимое DataTable как XML с использованием указанного элемента TextWriter.

WriteXml(TextWriter, Boolean)

Записывает текущее содержимое DataTable как XML с использованием указанного элемента TextWriter. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXml(TextWriter, XmlWriteMode)

Записывает текущие данные и по возможности схему для DataTable с помощью указанных TextWriter и XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema.

WriteXml(TextWriter, XmlWriteMode, Boolean)

Записывает текущие данные и по возможности схему для DataTable с помощью указанных TextWriter и XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXml(XmlWriter)

Записывает текущее содержимое DataTable как XML с использованием указанного элемента XmlWriter.

WriteXml(XmlWriter, Boolean)

Записывает текущее содержимое DataTable как XML с использованием указанного элемента XmlWriter.

WriteXml(XmlWriter, XmlWriteMode)

Записывает текущие данные и по возможности схему для DataTable с помощью указанных XmlWriter и XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema.

WriteXml(XmlWriter, XmlWriteMode, Boolean)

Записывает текущие данные и по возможности схему для DataTable с помощью указанных XmlWriter и XmlWriteMode. Чтобы записать схему, задайте в параметре mode значение WriteSchema. Чтобы сохранить данные для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXmlSchema(Stream)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы в указанный поток.

WriteXmlSchema(Stream, Boolean)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы в указанный поток. Чтобы сохранить схему для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXmlSchema(String)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы в указанный файл.

WriteXmlSchema(String, Boolean)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы в указанный файл. Чтобы сохранить схему для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXmlSchema(TextWriter)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы, используя указанный класс TextWriter.

WriteXmlSchema(TextWriter, Boolean)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы, используя указанный класс TextWriter. Чтобы сохранить схему для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

WriteXmlSchema(XmlWriter)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы, используя указанный класс XmlWriter.

WriteXmlSchema(XmlWriter, Boolean)

Записывает текущую структуру данных таблицы DataTable в виде XML-схемы, используя указанный класс XmlWriter. Чтобы сохранить схему для таблицы и всех ее потомков, установите для параметра writeHierarchy значение true.

События

ColumnChanged

Происходит после изменения значения указанного объекта DataColumn в DataRow.

ColumnChanging

Происходит при изменении значения указанного объекта DataColumn в DataRow.

Disposed

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

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

Происходит после инициализации таблицы DataTable.

RowChanged

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

RowChanging

Происходит при изменении объекта DataRow.

RowDeleted

Происходит после удаления строки таблицы.

RowDeleting

Происходит перед удалением строки таблицы.

TableCleared

Происходит после очистки DataTable.

TableClearing

Происходит, когда очищается таблица DataTable.

TableNewRow

Происходит, когда вставляется новая строка DataRow.

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

IListSource.ContainsListCollection

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

IListSource.GetList()

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

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Заполняет объект сведений о сериализации данными, необходимыми для сериализации DataTable.

IXmlSerializable.GetSchema()

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

IXmlSerializable.ReadXml(XmlReader)

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

IXmlSerializable.WriteXml(XmlWriter)

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

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

AsDataView(DataTable)

Создает и возвращает объект DataView с поддержкой LINQ.

AsEnumerable(DataTable)

Возвращает объект IEnumerable<T>, где универсальный параметр T имеет значение DataRow. Этот объект можно использовать в запросе выражения или метода LINQ.

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

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

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

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