DataTable Classe

Definizione

Rappresenta una tabella di dati in memoria.

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
Ereditarietà
Ereditarietà
DataTable
Derivato
Attributi
Implementazioni

Esempio

L'esempio seguente crea due DataTable oggetti e un DataRelation oggetto e aggiunge i nuovi oggetti a un DataSetoggetto . Le tabelle vengono quindi visualizzate in un DataGridView controllo.

// 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

In questo esempio viene illustrato come creare manualmente un oggetto DataTable tramite definizioni di schema specifiche:

  • Creare più DataTable e definire le colonne iniziali.

  • Creare i vincoli della tabella.

  • Inserire i valori e visualizzare le tabelle.

  • Creare colonne di espressioni e visualizzare le tabelle.

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

Commenti

L'oggetto DataTable è un oggetto centrale nella libreria ADO.NET. Altri oggetti che usano l'oggetto DataTable includono DataSet e .DataView

Quando si accede agli DataTable oggetti, si noti che sono distinzione tra maiuscole e minuscole. Ad esempio, se uno DataTable è denominato "mydatatable" e un altro è denominato "Mydatatable", una stringa utilizzata per cercare una delle tabelle viene considerata come distinzione tra maiuscole e minuscole. Tuttavia, se esiste "mydatatable" e "Mydatatable" non viene considerata la stringa di ricerca come distinzione tra maiuscole e minuscole. Un DataSet oggetto può contenere due DataTable oggetti con lo stesso TableName valore della proprietà, ma valori di proprietà diversi Namespace . Per altre informazioni sull'uso di DataTable oggetti, vedere Creazione di una tabella dati.

Se si crea un oggetto DataTable a livello di codice, è prima necessario definire lo schema aggiungendo DataColumn oggetti all'oggetto DataColumnCollection (a cui si accede tramite la Columns proprietà). Per altre informazioni sull'aggiunta DataColumn di oggetti, vedere Aggiunta di colonne a una tabella dati.

Per aggiungere righe a un DataTableoggetto , è prima necessario usare il NewRow metodo per restituire un nuovo DataRow oggetto. Il NewRow metodo restituisce una riga con lo schema di DataTable, come è definito dall'oggetto della DataColumnCollectiontabella . Il numero massimo di righe che un DataTable oggetto può archiviare è 16.777.216. Per altre informazioni, vedere Aggiunta di dati a una tabella dati.

Contiene DataTable anche una raccolta di Constraint oggetti che possono essere usati per garantire l'integrità dei dati. Per altre informazioni, vedere Vincoli di tabella dati.

Esistono molti DataTable eventi che possono essere usati per determinare quando vengono apportate modifiche a una tabella. Tali attributi includono RowChanged, RowChanging, RowDeleting e RowDeleted. Per altre informazioni sugli eventi che possono essere usati con un DataTableoggetto , vedere Gestione degli eventi dataTable.

Quando viene creata un'istanza di DataTable , alcune delle proprietà di lettura/scrittura vengono impostate sui valori iniziali. Per un elenco di questi valori, vedere l'argomento del DataTable.DataTable costruttore.

Nota

Gli DataSet oggetti e DataTable ereditano da MarshalByValueComponent e supportano l'interfaccia ISerializable per la comunicazione remota .NET Framework. Questi sono gli unici oggetti ADO.NET che è possibile usare per la comunicazione remota .NET Framework.

Considerazioni relative alla sicurezza

Per informazioni sulla sicurezza di DataSet e DataTable, vedere Indicazioni sulla sicurezza.

Costruttori

DataTable()

Inizializza una nuova istanza della classe DataTable senza argomenti.

DataTable(SerializationInfo, StreamingContext)

Inizializza una nuova istanza della classe DataTable con dati serializzati.

DataTable(String)

Inizializza una nuova istanza della classe DataTable con il nome della tabella specificato.

DataTable(String, String)

Inizializza una nuova istanza della classe DataTable con il nome della tabella e lo spazio dei nomi specificati.

Campi

fInitInProgress

Controlla se l'inizializzazione è in corso. L'inizializzazione avviene in fase di esecuzione.

Proprietà

CaseSensitive

Indica se i confronti tra stringhe all'interno della tabella prendono in considerazione la distinzione tra maiuscole e minuscole.

ChildRelations

Ottiene l'insieme di relazioni figlio per l'oggetto DataTable.

Columns

Ottiene l'insieme di colonne che appartengono a questa tabella.

Constraints

Ottiene l'insieme di vincoli mantenuti da questa tabella.

Container

Ottiene il contenitore del componente.

(Ereditato da MarshalByValueComponent)
DataSet

Ottiene la classe DataSet a cui la tabella appartiene.

DefaultView

Ottiene una visualizzazione personalizzata della tabella che può comprendere una visualizzazione filtrata o la posizione del cursore.

DesignMode

Ottiene un valore che indica se il componente è in modalità progettazione.

(Ereditato da MarshalByValueComponent)
DisplayExpression

Ottiene o imposta l'espressione che restituisce un valore utilizzato per rappresentare questa tabella nell'interfaccia utente. La proprietà DisplayExpression consente di visualizzare il nome di questa tabella in un'interfaccia utente.

Events

Ottiene l'elenco dei gestori eventi allegati a questo componente.

(Ereditato da MarshalByValueComponent)
ExtendedProperties

Ottiene l'insieme di informazioni utente personalizzate.

HasErrors

Ottiene un valore che indica se sono presenti errori nelle righe delle tabelle dell'oggetto DataSet al quale la tabella appartiene.

IsInitialized

Ottiene un valore che indica se la classe DataTable è inizializzata.

Locale

Ottiene o imposta le informazioni sulle impostazioni locali utilizzate per confrontare stringhe all'interno della tabella.

MinimumCapacity

Ottiene o imposta la dimensione iniziale di questa tabella.

Namespace

Ottiene o imposta lo spazio dei nomi per la rappresentazione XML dei dati memorizzati nella classe DataTable.

ParentRelations

Ottiene l'insieme di relazioni padre dell'oggetto DataTable.

Prefix

Ottiene o imposta lo spazio dei nomi per la rappresentazione XML dei dati memorizzati nella classe DataTable.

PrimaryKey

Ottiene o imposta una matrice di colonne che agiscono da chiavi primarie della tabella di dati.

RemotingFormat

Ottiene o imposta il formato di serializzazione.

Rows

Ottiene l'insieme di righe che appartengono a questa tabella.

Site

Ottiene o imposta un oggetto ISite per l'oggetto DataTable.

TableName

Ottiene o imposta il nome di DataTable.

Metodi

AcceptChanges()

Convalida tutte le modifiche apportate a questa tabella sin dall'ultima chiamata al metodo AcceptChanges().

BeginInit()

Avvia l'inizializzazione di una DataTable usata su un form o da un altro componente. L'inizializzazione avviene in fase di esecuzione.

BeginLoadData()

Disattiva le notifiche, la manutenzione degli indici e i vincoli durante il caricamento dei dati.

Clear()

Cancella tutti i dati dell'oggetto DataTable.

Clone()

Duplica la struttura dell'oggetto DataTable, tra cui tutti gli schemi e i vincoli dell'oggetto DataTable.

Compute(String, String)

Calcola l'espressione specificata sulle righe correnti che soddisfano i criteri di filtro.

Copy()

Copia la struttura e i dati per questa classe DataTable.

CreateDataReader()

Restituisce una classe DataTableReader corrispondente ai dati all'interno di questa classe DataTable.

CreateInstance()

Crea una nuova istanza di DataTable.

Dispose()

Rilascia tutte le risorse usate da MarshalByValueComponent.

(Ereditato da MarshalByValueComponent)
Dispose(Boolean)

Rilascia le risorse non gestite usate da MarshalByValueComponent e, facoltativamente, le risorse gestite.

(Ereditato da MarshalByValueComponent)
EndInit()

Termina l'inizializzazione di una classe DataTable usata su un form o da un altro componente. L'inizializzazione avviene in fase di esecuzione.

EndLoadData()

Attiva le notifiche, la manutenzione degli indici e i vincoli dopo il caricamento dei dati.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetChanges()

Ottiene una copia della classe DataTable contenente tutte le modifiche apportate a essa dal momento in cui è stata caricata o dall'ultima chiamata al metodo AcceptChanges().

GetChanges(DataRowState)

Ottiene una copia della classe DataTable contenente tutte le modifiche apportate a essa dal momento in cui è stata caricata o dall'ultima chiamata al metodo AcceptChanges(), filtrata dall'enumerazione DataRowState.

GetDataTableSchema(XmlSchemaSet)

Questo metodo restituisce un'istanza XmlSchemaSet contenente il linguaggio WDSL (Web Services Description Language) che descrive la classe DataTable per i servizi Web.

GetErrors()

Ottiene una matrice di oggetti DataRow che contengono errori.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)

Popola un oggetto di informazioni di serializzazione con i dati necessari per serializzare l'istanza di DataTable.

GetRowType()

Ottiene il tipo della riga.

GetSchema()

Per una descrizione di questo membro, vedere GetSchema().

GetService(Type)

Ottiene l'implementatore dell'interfaccia IServiceProvider.

(Ereditato da MarshalByValueComponent)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
ImportRow(DataRow)

Copia un oggetto DataRow in un oggetto DataTable, conservando sia le impostazioni delle proprietà sia i valori originali e correnti.

Load(IDataReader)

Riempie una classe DataTable con valori di un'origine dati utilizzando l'interfaccia IDataReader fornita. Se DataTable contiene già righe, i dati in arrivo dall'origine dati vengono uniti alle righe esistenti.

Load(IDataReader, LoadOption)

Riempie una classe DataTable con valori di un'origine dati utilizzando l'interfaccia IDataReader fornita. Se DataTable contiene già righe, i dati in arrivo dall'origine dati vengono uniti alle righe esistenti, in base al valore del parametro loadOption.

Load(IDataReader, LoadOption, FillErrorEventHandler)

Riempie una classe DataTable con valori di un'origine dati utilizzando l'interfaccia IDataReader fornita, tramite un delegato di gestione degli errori.

LoadDataRow(Object[], Boolean)

Rileva e aggiorna una riga specifica. Se non viene trovata una riga corrispondente, viene creata una nuova riga utilizzando i valori dati.

LoadDataRow(Object[], LoadOption)

Rileva e aggiorna una riga specifica. Se non viene trovata una riga corrispondente, viene creata una nuova riga utilizzando i valori dati.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Merge(DataTable)

Unire la classe DataTable specificata alla classe DataTable corrente.

Merge(DataTable, Boolean)

Unire la classe DataTable specificata alla classe DataTable corrente, indicando se conservare le modifiche nella classe DataTable corrente.

Merge(DataTable, Boolean, MissingSchemaAction)

Unire la classe DataTable specificata alla classe DataTable corrente, indicando se conservare le modifiche e come gestire lo schema mancante nella classe DataTable corrente.

NewRow()

Crea un nuovo oggetto DataRow con lo stesso schema della tabella.

NewRowArray(Int32)

Restituisce una matrice di DataRow.

NewRowFromBuilder(DataRowBuilder)

Crea una nuova riga da una riga esistente.

OnColumnChanged(DataColumnChangeEventArgs)

Genera l'evento ColumnChanged.

OnColumnChanging(DataColumnChangeEventArgs)

Genera l'evento ColumnChanging.

OnPropertyChanging(PropertyChangedEventArgs)

Genera l'evento PropertyChanged.

OnRemoveColumn(DataColumn)

Notifica all'oggetto DataTable che è in corso l'eliminazione di un oggetto DataColumn.

OnRowChanged(DataRowChangeEventArgs)

Genera l'evento RowChanged.

OnRowChanging(DataRowChangeEventArgs)

Genera l'evento RowChanging.

OnRowDeleted(DataRowChangeEventArgs)

Genera l'evento RowDeleted.

OnRowDeleting(DataRowChangeEventArgs)

Genera l'evento RowDeleting.

OnTableCleared(DataTableClearEventArgs)

Genera l'evento TableCleared.

OnTableClearing(DataTableClearEventArgs)

Genera l'evento TableClearing.

OnTableNewRow(DataTableNewRowEventArgs)

Genera l'evento TableNewRow.

ReadXml(Stream)

Legge i dati e lo schema XML nella classe DataTable utilizzando la classe Stream specificata.

ReadXml(String)

Legge i dati e lo schema XML nella classe DataTable dal file specificato.

ReadXml(TextReader)

Legge i dati e lo schema XML nella classe DataTable utilizzando la classe TextReader specificata.

ReadXml(XmlReader)

Legge i dati e lo schema XML nell'oggetto DataTable utilizzando l'oggetto XmlReader specificato.

ReadXmlSchema(Stream)

Legge uno schema XML nella classe DataTable, utilizzando il flusso specificato.

ReadXmlSchema(String)

Legge uno schema XML nella classe DataTable dal file specificato.

ReadXmlSchema(TextReader)

Legge uno schema XML nella classe DataTable, utilizzando la classe TextReader specificata.

ReadXmlSchema(XmlReader)

Legge uno schema XML nella classe DataTable, utilizzando la classe XmlReader specificata.

ReadXmlSerializable(XmlReader)

Legge da un flusso XML.

RejectChanges()

Annulla tutte le modifiche apportate alla tabella dal momento in cui è stata caricata oppure dall'ultima volta in cui è stato chiamato il metodo AcceptChanges().

Reset()

Ripristina lo stato originale della classe DataTable. Reimposta rimuove tutti i dati, gli indici, le relazioni e le colonne della tabella. Se un oggetto DataSet include un oggetto DataTable, la tabella farà ancora parte del DataSet dopo che viene reimpostata.

Select()

Ottiene una matrice di tutti gli oggetti DataRow.

Select(String)

Ottiene una matrice di tutti gli oggetti DataRow che soddisfano i criteri di filtro.

Select(String, String)

Ottiene una matrice di tutti gli oggetti DataRow che soddisfano i criteri di filtro, in base al criterio di ordinamento specificato.

Select(String, String, DataViewRowState)

Ottiene una matrice di tutti gli oggetti DataRow che corrispondono al filtro in base all'ordinamento specificato e che corrispondono allo stato specificato.

ToString()

Ottiene le proprietà TableName e DisplayExpression se ne esiste una come stringa concatenata.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
WriteXml(Stream)

Scrive il contenuto corrente dell'oggetto DataTable come XML usando l'oggetto Stream specificato.

WriteXml(Stream, Boolean)

Scrive il contenuto corrente dell'oggetto DataTable come XML usando l'oggetto Stream specificato. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXml(Stream, XmlWriteMode)

Scrive i dati correnti e, facoltativamente, lo schema per l'oggetto DataTable nel file specificato utilizzando l'oggetto XmlWriteMode specificato. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema.

WriteXml(Stream, XmlWriteMode, Boolean)

Scrive i dati correnti e, facoltativamente, lo schema per l'oggetto DataTable nel file specificato utilizzando l'oggetto XmlWriteMode specificato. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXml(String)

Scrive i contenuti correnti della classe DataTable come XML tramite il file specificato.

WriteXml(String, Boolean)

Scrive i contenuti correnti della classe DataTable come XML tramite il file specificato. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXml(String, XmlWriteMode)

Scrive i dati correnti e, facoltativamente, lo schema per la classe DataTable utilizzando il file specificato e l'enumerazione XmlWriteMode. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema.

WriteXml(String, XmlWriteMode, Boolean)

Scrive i dati correnti e, facoltativamente, lo schema per la classe DataTable utilizzando il file specificato e l'enumerazione XmlWriteMode. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXml(TextWriter)

Scrive il contenuto corrente dell'oggetto DataTable come XML usando l'oggetto TextWriter specificato.

WriteXml(TextWriter, Boolean)

Scrive il contenuto corrente dell'oggetto DataTable come XML usando l'oggetto TextWriter specificato. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXml(TextWriter, XmlWriteMode)

Scrive i dati correnti e, facoltativamente, lo schema per l'oggetto DataTable utilizzando l'oggetto TextWriter e l'oggetto XmlWriteMode specificati. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema.

WriteXml(TextWriter, XmlWriteMode, Boolean)

Scrive i dati correnti e, facoltativamente, lo schema per l'oggetto DataTable utilizzando l'oggetto TextWriter e l'oggetto XmlWriteMode specificati. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXml(XmlWriter)

Scrive il contenuto corrente dell'oggetto DataTable come XML usando l'oggetto XmlWriter specificato.

WriteXml(XmlWriter, Boolean)

Scrive il contenuto corrente dell'oggetto DataTable come XML usando l'oggetto XmlWriter specificato.

WriteXml(XmlWriter, XmlWriteMode)

Scrive i dati correnti e, facoltativamente, lo schema per l'oggetto DataTable utilizzando l'oggetto XmlWriter e l'oggetto XmlWriteMode specificati. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema.

WriteXml(XmlWriter, XmlWriteMode, Boolean)

Scrive i dati correnti e, facoltativamente, lo schema per l'oggetto DataTable utilizzando l'oggetto XmlWriter e l'oggetto XmlWriteMode specificati. Per scrivere lo schema, impostare il valore del parametro mode su WriteSchema. Per salvare i dati per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXmlSchema(Stream)

Scrive la struttura dei dati correnti della classe DataTable come schema XML nel flusso specificato.

WriteXmlSchema(Stream, Boolean)

Scrive la struttura dei dati correnti della classe DataTable come schema XML nel flusso specificato. Per salvare lo schema per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXmlSchema(String)

Scrive la struttura dei dati correnti della classe DataTable come schema XML nel file specificato.

WriteXmlSchema(String, Boolean)

Scrive la struttura dei dati correnti della classe DataTable come schema XML nel file specificato. Per salvare lo schema per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXmlSchema(TextWriter)

Scrive la struttura dei dati correnti della classe DataTable come schema XML utilizzando la classe TextWriter specificata.

WriteXmlSchema(TextWriter, Boolean)

Scrive la struttura dei dati correnti della classe DataTable come schema XML utilizzando la classe TextWriter specificata. Per salvare lo schema per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

WriteXmlSchema(XmlWriter)

Scrive la struttura dei dati correnti della classe DataTable come schema XML utilizzando la classe XmlWriter specificata.

WriteXmlSchema(XmlWriter, Boolean)

Scrive la struttura dei dati correnti della classe DataTable come schema XML utilizzando la classe XmlWriter specificata. Per salvare lo schema per la tabella e i relativi discendenti, impostare il parametro writeHierarchy su true.

evento

ColumnChanged

Viene generato una volta modificato il valore per l'oggetto DataColumn specificato in un oggetto DataRow.

ColumnChanging

Viene generato quando è in corso la modifica di un valore per l'oggetto DataColumn specificato in un oggetto DataRow.

Disposed

Aggiunge un gestore evento per restare in attesa dell'evento Disposed sul componente.

(Ereditato da MarshalByValueComponent)
Initialized

Si verifica dopo l'inizializzazione dell'oggetto DataTable.

RowChanged

Si verifica dopo la modifica di un oggetto DataRow.

RowChanging

Si verifica durante la modifica di un oggetto DataRow.

RowDeleted

Viene generato dopo l'eliminazione di una riga nella tabella.

RowDeleting

Viene generato prima dell'eliminazione di una riga nella tabella.

TableCleared

Si verifica dopo che un oggetto DataTable viene cancellato.

TableClearing

Si verifica se un oggetto DataTable viene cancellato.

TableNewRow

Si verifica quando viene inserito un nuovo oggetto DataRow.

Implementazioni dell'interfaccia esplicita

IListSource.ContainsListCollection

Per una descrizione di questo membro, vedere ContainsListCollection.

IListSource.GetList()

Per una descrizione di questo membro, vedere GetList().

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Popola un oggetto di informazioni di serializzazione con i dati necessari per serializzare l'istanza di DataTable.

IXmlSerializable.GetSchema()

Per una descrizione di questo membro, vedere GetSchema().

IXmlSerializable.ReadXml(XmlReader)

Per una descrizione di questo membro, vedere ReadXml(XmlReader).

IXmlSerializable.WriteXml(XmlWriter)

Per una descrizione di questo membro, vedere WriteXml(XmlWriter).

Metodi di estensione

AsDataView(DataTable)

Crea e restituisce un oggetto DataView che supporta LINQ.

AsEnumerable(DataTable)

Restituisce un oggetto IEnumerable<T>, in cui il parametro generico T è DataRow. Questo oggetto può essere usato in un'espressione LINQ o in una query del metodo.

Si applica a

Thread safety

Questo tipo è sicuro per le operazioni di lettura multithreading. È necessario sincronizzare tutte le operazioni di scrittura.

Vedi anche