DataTable对象使用札记

以下示例创建两个 DataTable 对象和一个 DataRelation 对象,并将这些新对象添加到 DataSet 中。然后通过调用 DataGrid.SetDataBinding 方法在 DataGrid 控件中显示这些表。
private System.Data.DataSet myDataSet;

 private void MakeDataTables(){

    // Run all of the functions. 

    MakeParentTable();

    MakeChildTable();

    MakeDataRelation();

    BindToDataGrid();

 }

 private void MakeParentTable(){

    // Create a new DataTable.

    System.Data.DataTable myDataTable = new DataTable("ParentTable");

    // Declare variables for DataColumn and DataRow objects.

    DataColumn myDataColumn;

    DataRow myDataRow;

    // Create new DataColumn, set DataType, ColumnName and add to DataTable.    

    myDataColumn = new DataColumn();

    myDataColumn.DataType = System.Type.GetType("System.Int32");

    myDataColumn.ColumnName = "id";

    myDataColumn.ReadOnly = true;

    myDataColumn.Unique = true;

    // Add the Column to the DataColumnCollection.

    myDataTable.Columns.Add(myDataColumn);

    // Create second column.

    myDataColumn = new DataColumn();

    myDataColumn.DataType = System.Type.GetType("System.String");

    myDataColumn.ColumnName = "ParentItem";

    myDataColumn.AutoIncrement = false;

    myDataColumn.Caption = "ParentItem";

    myDataColumn.ReadOnly = false;

    myDataColumn.Unique = false;

   // Add the column to the table.

    myDataTable.Columns.Add(myDataColumn);

    // Make the ID column the primary key column.

    DataColumn[] PrimaryKeyColumns = new DataColumn[1];

    PrimaryKeyColumns[0] = myDataTable.Columns["id"];

    myDataTable.PrimaryKey = PrimaryKeyColumns;

    // Instantiate the DataSet variable.

    myDataSet = new DataSet();

    // Add the new DataTable to the DataSet.

    myDataSet.Tables.Add(myDataTable);

 

    // Create three new DataRow objects and add them to the DataTable

    for (int i = 0; i<= 2; i++){

       myDataRow = myDataTable.NewRow();

       myDataRow["id"] = i;

       myDataRow["ParentItem"] = "ParentItem " + i;

       myDataTable.Rows.Add(myDataRow);

    }

 }

 

 private void MakeChildTable(){

    // Create a new DataTable.

    DataTable myDataTable = new DataTable("childTable");

    DataColumn myDataColumn;

    DataRow myDataRow;

 

    // Create first column and add to the DataTable.

    myDataColumn = new DataColumn();

    myDataColumn.DataType= System.Type.GetType("System.Int32");

    myDataColumn.ColumnName = "ChildID";

    myDataColumn.AutoIncrement = true;

    myDataColumn.Caption = "ID";

    myDataColumn.ReadOnly = true;

    myDataColumn.Unique = true;

    // Add the column to the DataColumnCollection.

    myDataTable.Columns.Add(myDataColumn);

 

    // Create second column.

    myDataColumn = new DataColumn();

    myDataColumn.DataType= System.Type.GetType("System.String");

    myDataColumn.ColumnName = "ChildItem";

    myDataColumn.AutoIncrement = false;

    myDataColumn.Caption = "ChildItem";

    myDataColumn.ReadOnly = false;

    myDataColumn.Unique = false;

    myDataTable.Columns.Add(myDataColumn);

 

    // Create third column.

    myDataColumn = new DataColumn();

    myDataColumn.DataType= System.Type.GetType("System.Int32");

    myDataColumn.ColumnName = "ParentID";

    myDataColumn.AutoIncrement = false;

    myDataColumn.Caption = "ParentID";

    myDataColumn.ReadOnly = false;

    myDataColumn.Unique = false;

    myDataTable.Columns.Add(myDataColumn);

 

    myDataSet.Tables.Add(myDataTable);

    // Create three sets of DataRow objects, five rows each, and add to DataTable.

    for(int i = 0; i <= 4; i ++){

       myDataRow = myDataTable.NewRow();

       myDataRow["childID"] = i;

       myDataRow["ChildItem"] = "Item " + i;

       myDataRow["ParentID"] = 0 ;

       myDataTable.Rows.Add(myDataRow);

    }

    for(int i = 0; i <= 4; i ++){

       myDataRow = myDataTable.NewRow();

       myDataRow["childID"] = i + 5;

       myDataRow["ChildItem"] = "Item " + i;

       myDataRow["ParentID"] = 1 ;

       myDataTable.Rows.Add(myDataRow);

    }

    for(int i = 0; i <= 4; i ++){

       myDataRow = myDataTable.NewRow();

       myDataRow["childID"] = i + 10;

       myDataRow["ChildItem"] = "Item " + i;

       myDataRow["ParentID"] = 2 ;

       myDataTable.Rows.Add(myDataRow);

    }

 }

 

 private void MakeDataRelation(){

    // DataRelation requires two DataColumn (parent and child) and a name.

    DataRelation myDataRelation;

    DataColumn parentColumn;

    DataColumn childColumn;

    parentColumn = myDataSet.Tables["ParentTable"].Columns["id"];

    childColumn = myDataSet.Tables["ChildTable"].Columns["ParentID"];

    myDataRelation = new DataRelation("parent2Child", parentColumn, childColumn);

    myDataSet.Tables["ChildTable"].ParentRelations.Add(myDataRelation);

 }

 

 private void BindToDataGrid(){

    // Instruct the DataGrid to bind to the DataSet, with the 

    // ParentTable as the topmost DataTable.

    dataGrid1.SetDataBinding(myDataSet,"ParentTable");

 }
 
 
 
以下示例创建 System.Windows.Forms.DataGridTable,并在 System.Windows.Forms.DataGrid 控件中显示它。
注意   此示例显示如何使用 DataTable 构造函数的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
private void MakeDataTableAndDisplay(){

   // Create new DataTable.

   DataTable myDataTable = new DataTable("MyDataTable");

   

   // Declare DataColumn and DataRow variables.

   DataColumn myDataColumn;

   DataRow myDataRow;

 

   // Create new DataColumn, set DataType, ColumnName and add to DataTable.    

   myDataColumn = new DataColumn();

   myDataColumn.DataType = System.Type.GetType("System.Int32");

   myDataColumn.ColumnName = "id";

   myDataTable.Columns.Add(myDataColumn);

 

   // Create second column.

   myDataColumn = new DataColumn();

   myDataColumn.DataType = Type.GetType("System.String");

   myDataColumn.ColumnName = "item";

   myDataTable.Columns.Add(myDataColumn);

 

   // Create new DataRow objects and add to DataTable.    

   for(int i = 0; i < 10; i++){

      myDataRow = myDataTable.NewRow();

      myDataRow["id"] = i;

      myDataRow["item"] = "item " + i;

      myDataTable.Rows.Add(myDataRow);

   }

   // Set to DataGrid.DataSource property to the table.

   dataGrid1.DataSource = myDataTable;

}
 
 
 
 
 
 
 
备注
若要创建新的 DataRow,必须使用 NewRow 方法返回新对象。这样的对象将按照架构自动配置,该架构是通过 DataColumn 对象的集合为 DataTable 定义的。在创建新行并为行中每个列设置值之后,使用 Add 方法将该行添加到 DataRowCollection 中。
集合中的每个 DataRow 表示表中的一行数据。若要提交对行中某一列的值的更改,必须调用 AcceptChanges 方法。
示例
下面显示两个返回和设置行的示例。第一个示例使用 Rows 属性,并为每一行打印每一列的值。第二个示例使用 DataTable 对象的 NewRow 方法创建具有 DataTable 的架构的新 DataRow 对象。在设置行值之后,通过 Add 方法将该行添加到 DataRowCollection 中。
private void PrintRows(DataSet myDataSet){

   // For each table in the DataSet, print the values of each row.

 

   foreach(DataTable thisTable in myDataSet.Tables){

      // For each row, print the values of each column.

      foreach(DataRow myRow in thisTable.Rows){

         foreach(DataColumn myCol in thisTable.Columns){

            Console.WriteLine(myRow[myCol]);

         }

       }

   }

}

 

 

private void AddARow(DataSet ds){

   DataTable t;

   t = ds.Tables["Suppliers"];

   // Use the NewRow method to create a DataRow with the table's schema.

   DataRow newRow = t.NewRow();

   // Set values in the columns:

   newRow["CompanyID"] = "NewCompanyID";

   newRow["CompanyName"] = "NewCompanyName";

   // Add the row to the rows collection.

   t.Rows.Add(newRow);

}

 
 
DataTable.Columns 属性
public DataColumnCollection Columns {get;}
属性值
DataColumnCollection,包含该表的 DataColumn 对象的集合;否则为空值(如果不存在任何 DataColumn 对象)。
备注
DataColumnCollection 通过定义每一列的数据类型来确定表的架构。
示例 以下示例使用 Columns 属性打印表中每一行的每个值。
private void PrintValues(DataTable myTable){

    foreach(DataRow myRow in myTable.Rows){

       foreach(DataColumn myCol in myTable.Columns){

          Console.WriteLine(myRow[myCol]);

       }

    }

 }
 
DataTable.Clear 方法
public void Clear();
备注所有表中的所有行都被移除。如果表中有任何将使子行受到影响的强制子关系,则生成异常。
如果 DataSet 绑定到 XmlDataDocument,则调用 DataSet.Clear 或 DataTable.Clear 将引发 NotSupportedException。为避免这种情况,请遍历每个表,逐个移除每一行。
示例
private void ClearTable(DataTable myTable){

    try{

       myTable.Clear();

    }

    catch (DataException e){

    // Process exception and return.

        System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();

        log.Source = "My Application";

        log.WriteEntry(e.ToString());

        Console.WriteLine("Exception of type {0} occurred.", e.GetType());

    }

    

 }
 
 
DataTable.Clone 方法
克隆 DataTable 的结构,包括所有 DataTable 架构和约束。
public virtual DataTable Clone();
返回值新的 DataTable,与当前的 DataTable 具有相同的架构。
注意   如果这些类已经过派生,则副本也具有相同的派生类。
示例
以下示例创建 DataTable 对象架构的复本。
private void GetClone(DataTable myDataTable){

    // Get a clone of the original DataTable.

    DataTable cloneTable;

    cloneTable = myDataTable.Clone();

    // Insert code to work with clone of the DataTable.

 }
.Copy 方法
public DataTable Copy();
返回值
新的 DataTable,它具有与该 DataTable 相同的结构(表架构和约束)和数据。
注意   如果这些类已经过派生,则副本也具有相同的派生类。
示例
以下示例使用 Copy 方法创建初始 DataTable 的副本。
 
 
private void CopyDataTable(DataTable myDataTable){

    // Create an object variable for the copy.

    DataTable copyDataTable;

    copyDataTable = myDataTable.Copy();

    // Insert code to work with the copy.

 }
DataTable.Compute 方法
public object Compute(

   string expression,

   string filter

);
参数
expression
要计算的表达式。
filter
要限制在表达式中进行计算的行的筛选器。
返回值
Object,设置为计算结果。
备注
expression 参数需要聚合函数。例如,以下是合法表达式:
Count(Quantity)
但是以下表达式不合法:
Sum (Quantity * UnitPrice)
如果必须针对两列或多列执行操作,则应该创建 DataColumn,并将它的 Expression 属性设置为适当的表达式,然后针对结果列使用聚合表达式。在这种情况下,假定有一个名为“total”的 DataColumn,并且 Expression 属性设置为:
“Quantity * UnitPrice”
Compute 方法的表达式参数将为:
Sum(total)
第二个参数 filter 确定在表达式中使用哪些行。例如,如果该表包含名为“colDate”的日期列,则可用以下表达式限制这些行:
colDate > 1/1/99 AND colDate < 17/1/99
有关为这两个参数创建表达式的规则,请参见 DataColumn 类的 Expression 属性。
示例
以下示例针对识别号为 5 的销售人员,对名为“Total”的列的值求和。
private void ComputeBySalesSalesID(DataSet myDataSet){

    // Presumes a DataTable named "Orders" that has a column named "Total."

    DataTable myTable;

    myTable = myDataSet.Tables["Orders"];

    // Declare an object variable.

    object objSum;

    objSum = myTable.Compute("Sum(Total)", "EmpID = 5");

 }
DataTable.NewRow 方法
public DataRow NewRow();
返回值
DataRow,其架构与 DataTable 的架构相同。
备注
必须使用 NewRow 方法才能创建与 DataTable 具有相同架构的新 DataRow 对象。在创建 DataRow 之后,可以通过 DataTable 对象的 Rows 属性将其添加到 DataRowCollection 中。
示例
以下示例创建一个 DataTable、添加两个用于确定表的架构的 DataColumn 对象、使用 NewRow 方法创建几个新的 DataRow 对象。然后使用 Add 方法将这些 DataRow 对象添加到 DataRowCollection 中。
private void MakeDataTableAndDisplay(){

   // Create new DataTable and DataSource objects.

   DataTable myDataTable = new DataTable();

   // Declare DataColumn and DataRow variables.

   DataColumn myColumn;

   DataRow myRow; 

   DataView myDataView;

   // Create new DataColumn, set DataType, ColumnName and add to DataTable.    

   myColumn = new DataColumn();

   myColumn.DataType = System.Type.GetType("System.Int32");

   myColumn.ColumnName = "id";

   myDataTable.Columns.Add(myColumn);

   // Create second column.

   myColumn = new DataColumn();

   myColumn.DataType = Type.GetType("System.String");

   myColumn.ColumnName = "item";

   myDataTable.Columns.Add(myColumn);

   // Create new DataRow objects and add to DataTable.    

   for(int i = 0; i < 10; i++){

      myRow = myDataTable.NewRow();

      myRow["id"] = i;

      myRow["item"] = "item " + i.ToString();

      myDataTable.Rows.Add(myRow);

   }

   // Create a DataView using the DataTable.

   myDataView = new DataView(myDataTable);

   // Set a DataGrid control's DataSource to the DataView.

   dataGrid1.DataSource = myDataView;

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值