DataTable Klasa

Definicja

Reprezentuje jedną tabelę danych w pamięci.

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
Dziedziczenie
Dziedziczenie
DataTable
Pochodne
Atrybuty
Implementuje

Przykłady

Poniższy przykład tworzy dwa DataTable obiekty i jeden DataRelation obiekt i dodaje nowe obiekty do obiektu DataSet. Następnie tabele są wyświetlane w kontrolce 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

W tym przykładzie pokazano, jak ręcznie utworzyć tabelę danych z określonymi definicjami schematu:

  • Utwórz wiele tabel danych i zdefiniuj początkowe kolumny.

  • Utwórz ograniczenia tabeli.

  • Wstaw wartości i wyświetl tabele.

  • Utwórz kolumny wyrażeń i wyświetl tabele.

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

Uwagi

Obiekt DataTable jest centralnym obiektem w bibliotece ADO.NET. Inne obiekty korzystające z DataTable elementu DataSet include i .DataView

Podczas uzyskiwania DataTable dostępu do obiektów należy pamiętać, że są one uwzględniane warunkowo. Na przykład jeśli jedna DataTable ma nazwę "mydatatable", a druga nosi nazwę "Mydatatable", ciąg używany do wyszukiwania jednej z tabel jest traktowany jako rozróżniana wielkość liter. Jeśli jednak ciąg wyszukiwania "mydatatable" istnieje i "Mydatatable" nie, ciąg wyszukiwania jest uważany za niewrażliwy na wielkość liter. Obiekt DataSet może zawierać dwa DataTable obiekty, które mają tę samą TableName wartość właściwości, ale różne Namespace wartości właściwości. Aby uzyskać więcej informacji na temat pracy z obiektami DataTable , zobacz Tworzenie tabeli danych.

Jeśli tworzysz DataTable programowo, musisz najpierw zdefiniować jego schemat, dodając DataColumn obiekty do DataColumnCollection obiektu (dostępne za pośrednictwem Columns właściwości). Aby uzyskać więcej informacji na temat dodawania DataColumn obiektów, zobacz Dodawanie kolumn do tabeli DataTable.

Aby dodać wiersze do klasy DataTable, należy najpierw użyć NewRow metody , aby zwrócić nowy DataRow obiekt. Metoda NewRow zwraca wiersz ze schematem DataTableelementu , ponieważ jest definiowana przez tabelę DataColumnCollection. Maksymalna liczba wierszy, które DataTable można przechowywać, wynosi 16 777 216. Aby uzyskać więcej informacji, zobacz Dodawanie danych do tabeli DataTable.

Zawiera DataTable również kolekcję Constraint obiektów, których można użyć do zapewnienia integralności danych. Aby uzyskać więcej informacji, zobacz Ograniczenia tabeli danych.

Istnieje wiele DataTable zdarzeń, których można użyć do określenia, kiedy zmiany są wprowadzane do tabeli. Należą do RowChangednich : , RowChanging, RowDeletingi RowDeleted. Aby uzyskać więcej informacji na temat zdarzeń, które mogą być używane z elementem DataTable, zobacz Obsługa zdarzeń w formie tabeli danych.

Po utworzeniu wystąpienia niektóre DataTable właściwości odczytu/zapisu są ustawione na wartości początkowe. Aby uzyskać listę tych wartości, zobacz temat konstruktora DataTable.DataTable .

Uwaga

Obiekty DataSet i DataTable dziedziczą i MarshalByValueComponent obsługują ISerializable interfejs na potrzeby komunikacji zdalnie .NET Framework. Są to jedyne obiekty ADO.NET, których można użyć do komunikacji zdalnie .NET Framework.

Zagadnienia dotyczące bezpieczeństwa

Aby uzyskać informacje o zabezpieczeniach dataSet i DataTable, zobacz Wskazówki dotyczące zabezpieczeń.

Konstruktory

DataTable()

Inicjuje DataTable nowe wystąpienie klasy bez argumentów.

DataTable(SerializationInfo, StreamingContext)

Inicjuje nowe wystąpienie klasy DataTable z zserializowanymi danymi.

DataTable(String)

Inicjuje DataTable nowe wystąpienie klasy o określonej nazwie tabeli.

DataTable(String, String)

Inicjuje DataTable nowe wystąpienie klasy przy użyciu określonej nazwy tabeli i przestrzeni nazw.

Pola

fInitInProgress

Sprawdza, czy inicjowanie jest w toku. Inicjowanie odbywa się w czasie wykonywania.

Właściwości

CaseSensitive

Wskazuje, czy porównania ciągów w tabeli są uwzględniane wielkości liter.

ChildRelations

Pobiera kolekcję relacji podrzędnych dla tego elementu DataTable.

Columns

Pobiera kolekcję kolumn należących do tej tabeli.

Constraints

Pobiera kolekcję ograniczeń obsługiwanych przez tę tabelę.

Container

Pobiera kontener dla składnika.

(Odziedziczone po MarshalByValueComponent)
DataSet

Pobiera element DataSet , do którego należy ta tabela.

DefaultView

Pobiera dostosowany widok tabeli, który może zawierać filtrowany widok lub położenie kursora.

DesignMode

Pobiera wartość wskazującą, czy składnik jest obecnie w trybie projektowania.

(Odziedziczone po MarshalByValueComponent)
DisplayExpression

Pobiera lub ustawia wyrażenie zwracające wartość używaną do reprezentowania tej tabeli w interfejsie użytkownika. Właściwość DisplayExpression umożliwia wyświetlenie nazwy tej tabeli w interfejsie użytkownika.

Events

Pobiera listę programów obsługi zdarzeń dołączonych do tego składnika.

(Odziedziczone po MarshalByValueComponent)
ExtendedProperties

Pobiera kolekcję dostosowanych informacji o użytkowniku.

HasErrors

Pobiera wartość wskazującą, czy występują błędy w dowolnych wierszach w dowolnej tabeli, DataSet do której należy tabela.

IsInitialized

Pobiera wartość wskazującą, czy DataTable element jest inicjowany.

Locale

Pobiera lub ustawia informacje regionalne używane do porównywania ciągów w tabeli.

MinimumCapacity

Pobiera lub ustawia początkowy rozmiar początkowy dla tej tabeli.

Namespace

Pobiera lub ustawia przestrzeń nazw dla reprezentacji XML danych przechowywanych w obiekcie DataTable.

ParentRelations

Pobiera kolekcję relacji nadrzędnych dla tego DataTableelementu .

Prefix

Pobiera lub ustawia przestrzeń nazw dla reprezentacji XML danych przechowywanych w obiekcie DataTable.

PrimaryKey

Pobiera lub ustawia tablicę kolumn, które działają jako klucze podstawowe dla tabeli danych.

RemotingFormat

Pobiera lub ustawia format serializacji.

Rows

Pobiera kolekcję wierszy należących do tej tabeli.

Site

Pobiera lub ustawia wartość ISite dla elementu DataTable.

TableName

Pobiera lub ustawia nazwę .DataTable

Metody

AcceptChanges()

Zatwierdza wszystkie zmiany wprowadzone w tej tabeli od czasu ostatniego AcceptChanges() wywołania.

BeginInit()

Rozpoczyna inicjowanie elementu używanego DataTable w formularzu lub używanego przez inny składnik. Inicjowanie odbywa się w czasie wykonywania.

BeginLoadData()

Wyłącza powiadomienia, konserwację indeksu i ograniczenia podczas ładowania danych.

Clear()

Czyści DataTable wszystkie dane.

Clone()

Klonuje strukturę obiektu DataTable, w tym wszystkie DataTable schematy i ograniczenia.

Compute(String, String)

Oblicza podane wyrażenie w bieżących wierszach, które przekazują kryteria filtrowania.

Copy()

Kopiuje zarówno strukturę, jak i dane dla tego obiektu DataTable.

CreateDataReader()

Zwraca wartość odpowiadającą DataTableReader danym w tym DataTableobiekcie .

CreateInstance()

Tworzy nowe wystąpienie klasy DataTable.

Dispose()

Zwalnia wszelkie zasoby używane przez element MarshalByValueComponent.

(Odziedziczone po MarshalByValueComponent)
Dispose(Boolean)

Zwalnia zasoby niezarządzane używane przez element MarshalByValueComponent i opcjonalnie zwalnia zasoby zarządzane.

(Odziedziczone po MarshalByValueComponent)
EndInit()

Kończy inicjowanie obiektu DataTable używanego w formularzu lub używanego przez inny składnik. Inicjowanie odbywa się w czasie wykonywania.

EndLoadData()

Włącza powiadomienia, konserwację indeksu i ograniczenia po załadowaniu danych.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetChanges()

Pobiera kopię pliku DataTable zawierającego wszystkie zmiany wprowadzone do niego od czasu załadowania lub AcceptChanges() ostatniego wywołania.

GetChanges(DataRowState)

Pobiera kopię pliku zawierającego wszystkie zmiany wprowadzone do niego od czasu ostatniego DataTable załadowania lub od AcceptChanges() wywołania , filtrowane przez DataRowStateelement .

GetDataTableSchema(XmlSchemaSet)

Ta metoda zwraca XmlSchemaSet wystąpienie zawierające język opisu usług sieci Web (WSDL), który opisuje DataTable usług sieci Web.

GetErrors()

Pobiera tablicę DataRow obiektów, które zawierają błędy.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)

Wypełnia obiekt informacji o serializacji danymi wymaganymi do serializacji obiektu DataTable.

GetRowType()

Pobiera typ wiersza.

GetSchema()

Aby uzyskać opis tego członka, zobacz GetSchema().

GetService(Type)

Pobiera implementator obiektu IServiceProvider.

(Odziedziczone po MarshalByValueComponent)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
ImportRow(DataRow)

Kopiuje element DataRow do DataTableobiektu , zachowując wszelkie ustawienia właściwości, a także oryginalne i bieżące wartości.

Load(IDataReader)

Wypełnia element DataTable wartościami ze źródła danych przy użyciu podanego IDataReaderelementu . Jeśli obiekt DataTable zawiera już wiersze, dane przychodzące ze źródła danych zostaną scalone z istniejącymi wierszami.

Load(IDataReader, LoadOption)

Wypełnia element DataTable wartościami ze źródła danych przy użyciu podanego IDataReaderelementu . DataTable Jeśli już zawiera wiersze, dane przychodzące ze źródła danych są scalane z istniejącymi wierszami zgodnie z wartością parametruloadOption.

Load(IDataReader, LoadOption, FillErrorEventHandler)

Wypełnia element DataTable wartościami ze źródła danych przy użyciu dostarczonego IDataReader delegata obsługującego błędy.

LoadDataRow(Object[], Boolean)

Znajduje i aktualizuje określony wiersz. Jeśli nie znaleziono pasującego wiersza, zostanie utworzony nowy wiersz przy użyciu podanych wartości.

LoadDataRow(Object[], LoadOption)

Znajduje i aktualizuje określony wiersz. Jeśli nie znaleziono pasującego wiersza, zostanie utworzony nowy wiersz przy użyciu podanych wartości.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
Merge(DataTable)

Scal określony DataTable element z bieżącym DataTableelementem .

Merge(DataTable, Boolean)

Scal określony DataTable element z bieżącym DataTableelementem , wskazując, czy zachować zmiany w bieżącym elemencie DataTable.

Merge(DataTable, Boolean, MissingSchemaAction)

Scal określony DataTable z bieżącym DataTableelementem , wskazując, czy zachować zmiany i jak obsłużyć brakujący schemat w bieżącym elemencie DataTable.

NewRow()

Tworzy nowy DataRow z tym samym schematem co tabela.

NewRowArray(Int32)

Zwraca tablicę .DataRow

NewRowFromBuilder(DataRowBuilder)

Tworzy nowy wiersz z istniejącego wiersza.

OnColumnChanged(DataColumnChangeEventArgs)

ColumnChanged Zgłasza zdarzenie.

OnColumnChanging(DataColumnChangeEventArgs)

ColumnChanging Zgłasza zdarzenie.

OnPropertyChanging(PropertyChangedEventArgs)

PropertyChanged Zgłasza zdarzenie.

OnRemoveColumn(DataColumn)

Powiadamia, DataTable że element DataColumn jest usuwany.

OnRowChanged(DataRowChangeEventArgs)

RowChanged Zgłasza zdarzenie.

OnRowChanging(DataRowChangeEventArgs)

RowChanging Zgłasza zdarzenie.

OnRowDeleted(DataRowChangeEventArgs)

RowDeleted Zgłasza zdarzenie.

OnRowDeleting(DataRowChangeEventArgs)

RowDeleting Zgłasza zdarzenie.

OnTableCleared(DataTableClearEventArgs)

TableCleared Zgłasza zdarzenie.

OnTableClearing(DataTableClearEventArgs)

TableClearing Zgłasza zdarzenie.

OnTableNewRow(DataTableNewRowEventArgs)

TableNewRow Zgłasza zdarzenie.

ReadXml(Stream)

Odczytuje schemat XML i dane do DataTable elementu przy użyciu określonego Streamelementu .

ReadXml(String)

Odczytuje schemat XML i dane z DataTable określonego pliku.

ReadXml(TextReader)

Odczytuje schemat XML i dane do DataTable elementu przy użyciu określonego TextReaderelementu .

ReadXml(XmlReader)

Odczytuje schemat XML i dane do DataTable elementu przy użyciu określonego XmlReaderelementu .

ReadXmlSchema(Stream)

Odczytuje schemat XML do DataTable przy użyciu określonego strumienia.

ReadXmlSchema(String)

Odczytuje schemat XML do DataTable pliku z określonego pliku.

ReadXmlSchema(TextReader)

Odczytuje schemat XML do DataTable elementu przy użyciu określonego TextReaderelementu .

ReadXmlSchema(XmlReader)

Odczytuje schemat XML do DataTable elementu przy użyciu określonego XmlReaderelementu .

ReadXmlSerializable(XmlReader)

Odczytuje ze strumienia XML.

RejectChanges()

Wycofuje wszystkie zmiany wprowadzone w tabeli od momentu jej załadowania lub ostatni raz AcceptChanges() został wywołany.

Reset()

Resetuje element DataTable do stanu pierwotnego. Reset usuwa wszystkie dane, indeksy, relacje i kolumny tabeli. Jeśli zestaw danych zawiera tabelę DataTable, tabela będzie nadal częścią elementu DataSet po zresetowaniu tabeli.

Select()

Pobiera tablicę wszystkich DataRow obiektów.

Select(String)

Pobiera tablicę wszystkich DataRow obiektów spełniających kryteria filtrowania.

Select(String, String)

Pobiera tablicę wszystkich DataRow obiektów spełniających kryteria filtrowania w określonej kolejności sortowania.

Select(String, String, DataViewRowState)

Pobiera tablicę wszystkich DataRow obiektów, które pasują do filtru w kolejności sortowania zgodnego z określonym stanem.

ToString()

Pobiera elementy TableName i DisplayExpression, jeśli istnieje jeden jako połączony ciąg.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
WriteXml(Stream)

Zapisuje bieżącą zawartość obiektu DataTable jako XML przy użyciu określonego Streamelementu .

WriteXml(Stream, Boolean)

Zapisuje bieżącą zawartość DataTable pliku jako XML przy użyciu określonego Streamelementu . Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXml(Stream, XmlWriteMode)

Zapisuje bieżące dane i opcjonalnie schemat dla DataTable określonego pliku przy użyciu określonego XmlWriteModepliku . Aby napisać schemat, ustaw wartość parametru mode na WriteSchema.

WriteXml(Stream, XmlWriteMode, Boolean)

Zapisuje bieżące dane i opcjonalnie schemat dla DataTable określonego pliku przy użyciu określonego XmlWriteModepliku . Aby napisać schemat, ustaw wartość parametru mode na WriteSchema. Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXml(String)

Zapisuje bieżącą zawartość pliku DataTable jako XML przy użyciu określonego pliku.

WriteXml(String, Boolean)

Zapisuje bieżącą zawartość DataTable pliku jako XML przy użyciu określonego pliku. Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXml(String, XmlWriteMode)

Zapisuje bieżące dane i opcjonalnie schemat DataTable przy użyciu określonego pliku i XmlWriteMode. Aby napisać schemat, ustaw wartość parametru mode na WriteSchema.

WriteXml(String, XmlWriteMode, Boolean)

Zapisuje bieżące dane i opcjonalnie schemat DataTable przy użyciu określonego pliku i XmlWriteMode. Aby napisać schemat, ustaw wartość parametru mode na WriteSchema. Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXml(TextWriter)

Zapisuje bieżącą zawartość obiektu DataTable jako XML przy użyciu określonego TextWriterelementu .

WriteXml(TextWriter, Boolean)

Zapisuje bieżącą zawartość DataTable pliku jako XML przy użyciu określonego TextWriterelementu . Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXml(TextWriter, XmlWriteMode)

Zapisuje bieżące dane i opcjonalnie schemat DataTable przy użyciu określonego TextWriter parametru i XmlWriteMode. Aby napisać schemat, ustaw wartość parametru mode na WriteSchema.

WriteXml(TextWriter, XmlWriteMode, Boolean)

Zapisuje bieżące dane i opcjonalnie schemat DataTable przy użyciu określonego TextWriter parametru i XmlWriteMode. Aby napisać schemat, ustaw wartość parametru mode na WriteSchema. Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXml(XmlWriter)

Zapisuje bieżącą zawartość obiektu DataTable jako XML przy użyciu określonego XmlWriterelementu .

WriteXml(XmlWriter, Boolean)

Zapisuje bieżącą zawartość DataTable pliku jako XML przy użyciu określonego XmlWriterelementu .

WriteXml(XmlWriter, XmlWriteMode)

Zapisuje bieżące dane i opcjonalnie schemat DataTable przy użyciu określonego XmlWriter parametru i XmlWriteMode. Aby napisać schemat, ustaw wartość parametru mode na WriteSchema.

WriteXml(XmlWriter, XmlWriteMode, Boolean)

Zapisuje bieżące dane i opcjonalnie schemat DataTable przy użyciu określonego XmlWriter parametru i XmlWriteMode. Aby napisać schemat, ustaw wartość parametru mode na WriteSchema. Aby zapisać dane dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXmlSchema(Stream)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML do określonego strumienia.

WriteXmlSchema(Stream, Boolean)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML do określonego strumienia. Aby zapisać schemat dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXmlSchema(String)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML do określonego pliku.

WriteXmlSchema(String, Boolean)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML do określonego pliku. Aby zapisać schemat dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXmlSchema(TextWriter)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML przy użyciu określonego TextWriterelementu .

WriteXmlSchema(TextWriter, Boolean)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML przy użyciu określonego TextWriterelementu . Aby zapisać schemat dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

WriteXmlSchema(XmlWriter)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML przy użyciu określonego XmlWriterelementu .

WriteXmlSchema(XmlWriter, Boolean)

Zapisuje bieżącą strukturę DataTable danych jako schemat XML przy użyciu określonego XmlWriterelementu . Aby zapisać schemat dla tabeli i wszystkich jej elementów podrzędnych, ustaw writeHierarchy parametr na true.

Zdarzenia

ColumnChanged

Występuje po zmianie wartości określonej DataColumn w elemecie DataRow.

ColumnChanging

Występuje, gdy wartość jest zmieniana dla określonej DataColumn w elemecie DataRow.

Disposed

Dodaje program obsługi zdarzeń do nasłuchiwania Disposed zdarzenia w składniku.

(Odziedziczone po MarshalByValueComponent)
Initialized

Występuje po zainicjowaniu DataTable .

RowChanged

Występuje po pomyślnym DataRow zmianie.

RowChanging

Występuje, gdy element DataRow zmienia się.

RowDeleted

Występuje po usunięciu wiersza w tabeli.

RowDeleting

Występuje przed usunięciem wiersza w tabeli.

TableCleared

Występuje po wyczyszczonej DataTable .

TableClearing

Występuje, gdy DataTable element jest czyszczone.

TableNewRow

Występuje, gdy zostanie wstawiony nowy DataRow .

Jawne implementacje interfejsu

IListSource.ContainsListCollection

Aby uzyskać opis tego członka, zobacz ContainsListCollection.

IListSource.GetList()

Aby uzyskać opis tego członka, zobacz GetList().

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Wypełnia obiekt informacji o serializacji danymi wymaganymi do serializacji obiektu DataTable.

IXmlSerializable.GetSchema()

Aby uzyskać opis tego członka, zobacz GetSchema().

IXmlSerializable.ReadXml(XmlReader)

Aby uzyskać opis tego członka, zobacz ReadXml(XmlReader).

IXmlSerializable.WriteXml(XmlWriter)

Aby uzyskać opis tego członka, zobacz WriteXml(XmlWriter).

Metody rozszerzania

AsDataView(DataTable)

Tworzy i zwraca obiekt z DataView obsługą LINQ.

AsEnumerable(DataTable)

IEnumerable<T> Zwraca obiekt, w którym parametr T ogólny to DataRow. Ten obiekt może być używany w wyrażeniu LINQ lub zapytaniu metody.

Dotyczy

Bezpieczeństwo wątkowe

Ten typ jest bezpieczny dla operacji odczytu wielowątkowego. Należy zsynchronizować wszystkie operacje zapisu.

Zobacz też