http://msdn.microsoft.com/zh-cn/library/system.data.datatable.aspx




DataTable 类

.NET Framework 4.5
5(共 7)对本文的评价是有帮助 评价此主题

表示一个内存中数据表。

命名空间:  System.Data
程序集:  System.Data(在 System.Data.dll 中)

[SerializableAttribute]
public class DataTable : MarshalByValueComponent, IListSource, 
	ISupportInitializeNotification, ISupportInitialize, ISerializable, IXmlSerializable

DataTable 类型公开以下成员。

显示: 
  名称 说明
公共方法由 XNA Framework 提供支持 DataTable() 不带参数初始化 DataTable 类的新实例。
公共方法由 XNA Framework 提供支持 DataTable(String) 用指定的表名初始化 DataTable 类的新实例。
受保护的方法 DataTable(SerializationInfo, StreamingContext) 使用 SerializationInfo 和 StreamingContext 初始化 DataTable 类的新实例。
公共方法由 XNA Framework 提供支持 DataTable(String, String) 用指定的表名和命名空间初始化 DataTable 类的新实例。
页首

显示: 
  名称 说明
公共属性由 XNA Framework 提供支持 CaseSensitive 指示表中的字符串比较是否区分大小写。
公共属性由 XNA Framework 提供支持 ChildRelations 获取此 DataTable 的子关系的集合。
公共属性由 XNA Framework 提供支持 Columns 获取属于该表的列的集合。
公共属性由 XNA Framework 提供支持 Constraints 获取由该表维护的约束的集合。
公共属性由 XNA Framework 提供支持 Container 获取组件的容器。 (继承自 MarshalByValueComponent。)
公共属性由 XNA Framework 提供支持 DataSet 获取此表所属的 DataSet
公共属性由 XNA Framework 提供支持 DefaultView 获取可能包括筛选视图或游标位置的表的自定义视图。
公共属性由 XNA Framework 提供支持 DesignMode 获取指示组件当前是否处于设计模式的值。 (继承自 MarshalByValueComponent。)
公共属性由 XNA Framework 提供支持 DisplayExpression 获取或设置一个表达式,该表达式返回的值用于表示用户界面中的此表。 DisplayExpression 属性用于在用户界面中显示此表的名称。
受保护的属性由 XNA Framework 提供支持 Events 获取附加到该组件的事件处理程序的列表。 (继承自 MarshalByValueComponent。)
公共属性由 XNA Framework 提供支持 ExtendedProperties 获取自定义用户信息的集合。
公共属性由 XNA Framework 提供支持 HasErrors 获取一个值,该值指示该表所属的 DataSet 的任何表的任何行中是否有错误。
公共属性由 XNA Framework 提供支持 IsInitialized 获取一个值,该值指示是否已初始化 DataTable
公共属性由 XNA Framework 提供支持 Locale 获取或设置用于比较表中字符串的区域设置信息。
公共属性由 XNA Framework 提供支持 MinimumCapacity 获取或设置该表最初的起始大小。
公共属性由 XNA Framework 提供支持 Namespace 获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。
公共属性由 XNA Framework 提供支持 ParentRelations 获取该 DataTable 的父关系的集合。
公共属性由 XNA Framework 提供支持 Prefix 获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。
公共属性由 XNA Framework 提供支持 PrimaryKey 获取或设置充当数据表主键的列的数组。
公共属性 RemotingFormat 获取或设置序列化格式。
公共属性由 XNA Framework 提供支持 Rows 获取属于该表的行的集合。
公共属性由 XNA Framework 提供支持 Site 获取或设置 DataTable 的 System.ComponentModel.ISite (重写 MarshalByValueComponent.Site。)
公共属性由 XNA Framework 提供支持 TableName 获取或设置 DataTable 的名称。
页首

显示: 
  名称 说明
公共方法由 XNA Framework 提供支持 AcceptChanges 提交自上次调用 AcceptChanges 以来对该表进行的所有更改。
公共方法由 XNA Framework 提供支持 BeginInit 开始初始化在窗体上使用或由另一个组件使用的 DataTable 初始化发生在运行时。
公共方法由 XNA Framework 提供支持 BeginLoadData 在加载数据时关闭通知、索引维护和约束。
公共方法由 XNA Framework 提供支持 Clear 清除所有数据的 DataTable
公共方法由 XNA Framework 提供支持 Clone 克隆 DataTable 的结构,包括所有 DataTable 架构和约束。
公共方法由 XNA Framework 提供支持 Compute 计算用来传递筛选条件的当前行上的给定表达式。
公共方法由 XNA Framework 提供支持 Copy 复制该 DataTable 的结构和数据。
公共方法由 XNA Framework 提供支持 CreateDataReader 返回与此 DataTable 中的数据相对应的 DataTableReader
受保护的方法由 XNA Framework 提供支持 CreateInstance 基础结构。创建 DataTable 的一个新实例。
公共方法由 XNA Framework 提供支持 Dispose() 释放由 MarshalByValueComponent 使用的所有资源。 (继承自 MarshalByValueComponent。)
受保护的方法由 XNA Framework 提供支持 Dispose(Boolean) 释放由 MarshalByValueComponent 占用的非托管资源,还可以另外再释放托管资源。 (继承自 MarshalByValueComponent。)
公共方法由 XNA Framework 提供支持 EndInit 结束在窗体上使用或由另一个组件使用的 DataTable 的初始化。 初始化发生在运行时。
公共方法由 XNA Framework 提供支持 EndLoadData 在加载数据后打开通知、索引维护和约束。
公共方法由 XNA Framework 提供支持 Equals(Object) 确定指定的对象是否等于当前对象。 (继承自 Object。)
受保护的方法由 XNA Framework 提供支持 Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 MarshalByValueComponent。)
公共方法由 XNA Framework 提供支持 GetChanges() 获取 DataTable 的副本,该副本包含自加载以来或自上次调用 AcceptChanges 以来对该数据集进行的所有更改。
公共方法由 XNA Framework 提供支持 GetChanges(DataRowState) 获取由 DataRowState 筛选的 DataTable 的副本,该副本包含上次加载以来或调用 AcceptChanges 以来对该数据集进行的所有更改。
公共方法静态成员由 XNA Framework 提供支持 GetDataTableSchema 该方法返回一个包含 Web 服务描述语言 (WSDL) 的 XmlSchemaSet 实例,该语言描述了用作 Web 服务的 DataTable
公共方法由 XNA Framework 提供支持 GetErrors 获取包含错误的 DataRow 对象的数组。
公共方法由 XNA Framework 提供支持 GetHashCode 作为默认哈希函数。 (继承自 Object。)
公共方法 GetObjectData 用序列化 DataTable 所需的数据填充序列化信息对象。
受保护的方法由 XNA Framework 提供支持 GetRowType 基础结构。获取行类型。
受保护的方法由 XNA Framework 提供支持 GetSchema 基础结构。有关此成员的说明,请参见 IXmlSerializable.GetSchema
公共方法由 XNA Framework 提供支持 GetService 获取 IServiceProvider 的实施者。 (继承自 MarshalByValueComponent。)
公共方法由 XNA Framework 提供支持 GetType 获取当前实例的 Type (继承自 Object。)
公共方法由 XNA Framework 提供支持 ImportRow 将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值。
公共方法由 XNA Framework 提供支持 Load(IDataReader) 通过所提供的 IDataReader,用某个数据源的值填充 DataTable 如果 DataTable 已经包含行,则从数据源传入的数据将与现有的行合并。
公共方法由 XNA Framework 提供支持 Load(IDataReader, LoadOption) 通过所提供的 IDataReader,用某个数据源的值填充 DataTable 如果 DataTable 已包含行,则从数据源传入的数据将根据loadOption 参数的值与现有的行合并。
公共方法由 XNA Framework 提供支持 Load(IDataReader, LoadOption, FillErrorEventHandler) 通过所提供的使用错误处理委托的 IDataReader 用某个数据源中的值填充 DataTable
公共方法由 XNA Framework 提供支持 LoadDataRow(Object[], Boolean) 查找和更新特定行。 如果找不到任何匹配行,则使用给定值创建新行。
公共方法由 XNA Framework 提供支持 LoadDataRow(Object[], LoadOption) 查找和更新特定行。 如果找不到任何匹配行,则使用给定值创建新行。
受保护的方法由 XNA Framework 提供支持 MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
公共方法由 XNA Framework 提供支持 Merge(DataTable) 将指定的 DataTable 与当前的 DataTable 合并。
公共方法由 XNA Framework 提供支持 Merge(DataTable, Boolean) 将指定的 DataTable 与当前的 DataTable 合并,指示是否在当前的 DataTable 中保留更改。
公共方法由 XNA Framework 提供支持 Merge(DataTable, Boolean, MissingSchemaAction) 将指定的 DataTable 与当前的 DataTable 合并,指示是否在当前的 DataTable 中保留更改以及如何处理缺失的架构。
公共方法由 XNA Framework 提供支持 NewRow 创建与该表具有相同架构的新 DataRow
受保护的方法由 XNA Framework 提供支持 NewRowArray 基础结构。返回 DataRow 的数组。
受保护的方法由 XNA Framework 提供支持 NewRowFromBuilder 从现有的行创建新行。
受保护的方法由 XNA Framework 提供支持 OnColumnChanged 引发 ColumnChanged 事件。
受保护的方法由 XNA Framework 提供支持 OnColumnChanging 引发 ColumnChanging 事件。
受保护的方法由 XNA Framework 提供支持 OnPropertyChanging 引发 PropertyChanged 事件。
受保护的方法 OnRemoveColumn 通知 DataTableDataColumn 正在被移除。
受保护的方法由 XNA Framework 提供支持 OnRowChanged 引发 RowChanged 事件。
受保护的方法由 XNA Framework 提供支持 OnRowChanging 引发 RowChanging 事件。
受保护的方法由 XNA Framework 提供支持 OnRowDeleted 引发 RowDeleted 事件。
受保护的方法由 XNA Framework 提供支持 OnRowDeleting 引发 RowDeleting 事件。
受保护的方法由 XNA Framework 提供支持 OnTableCleared 引发 TableCleared 事件。
受保护的方法由 XNA Framework 提供支持 OnTableClearing 引发 TableClearing 事件。
受保护的方法由 XNA Framework 提供支持 OnTableNewRow 引发 TableNewRow 事件。
公共方法由 XNA Framework 提供支持 ReadXml(Stream) 使用指定的 Stream 将 XML 架构和数据读入 DataTable
公共方法由 XNA Framework 提供支持 ReadXml(String) 将指定文件中的 XML 架构和数据读入 DataTable 中。
公共方法由 XNA Framework 提供支持 ReadXml(TextReader) 使用指定的 TextReader 将 XML 架构和数据读入 DataTable
公共方法由 XNA Framework 提供支持 ReadXml(XmlReader) 使用指定的 XmlReader 将 XML 架构和数据读入 DataTable
公共方法由 XNA Framework 提供支持 ReadXmlSchema(Stream) 使用指定流将 XML 架构读入 DataTable 中。
公共方法由 XNA Framework 提供支持 ReadXmlSchema(String) 将指定文件中的 XML 架构读入 DataTable 中。
公共方法由 XNA Framework 提供支持 ReadXmlSchema(TextReader) 使用指定的 TextReader 将 XML 架构读入 DataTable 中。
公共方法由 XNA Framework 提供支持 ReadXmlSchema(XmlReader) 使用指定的 XmlReader 将 XML 架构读入 DataTable 中。
受保护的方法由 XNA Framework 提供支持 ReadXmlSerializable 基础结构。从 XML 流中读取。
公共方法由 XNA Framework 提供支持 RejectChanges 回滚自该表加载以来或上次调用 AcceptChanges 以来对该表进行的所有更改。
公共方法由 XNA Framework 提供支持 Reset 将 DataTable 重置为其初始状态。 重置将移除表的所有数据、索引、关系和列。 如果数据集包含一个数据表,则在重置该表之后,它将仍是数据集的一部分。
公共方法由 XNA Framework 提供支持 Select() 获取所有 DataRow 对象的数组。
公共方法由 XNA Framework 提供支持 Select(String) 获取按与筛选条件相匹配的所有 DataRow 对象的数组。
公共方法由 XNA Framework 提供支持 Select(String, String) 获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。
公共方法由 XNA Framework 提供支持 Select(String, String, DataViewRowState) 获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。
公共方法由 XNA Framework 提供支持 ToString 获取 TableName 和 DisplayExpression(如果有一个用作连接字符串)。 (重写 MarshalByValueComponent.ToString()。)
公共方法由 XNA Framework 提供支持 WriteXml(Stream) 使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。
公共方法由 XNA Framework 提供支持 WriteXml(String) 使用指定的文件以 XML 格式写入 DataTable 的当前内容。
公共方法由 XNA Framework 提供支持 WriteXml(TextWriter) 使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。
公共方法由 XNA Framework 提供支持 WriteXml(XmlWriter) 使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。
公共方法由 XNA Framework 提供支持 WriteXml(Stream, Boolean) 使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为true
公共方法由 XNA Framework 提供支持 WriteXml(Stream, XmlWriteMode) 使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件,还可以选择将架构写入指定的文件。 若要写架构,请将 mode参数的值设置为 WriteSchema
公共方法由 XNA Framework 提供支持 WriteXml(String, Boolean) 使用指定的文件以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为true
公共方法由 XNA Framework 提供支持 WriteXml(String, XmlWriteMode) 使用指定的文件和 XmlWriteMode,写入 DataTable 的当前数据(还可以选择写入架构)。 若要写架构,请将 mode 参数的值设置为WriteSchema
公共方法由 XNA Framework 提供支持 WriteXml(TextWriter, Boolean) 使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true
公共方法由 XNA Framework 提供支持 WriteXml(TextWriter, XmlWriteMode) 使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema
公共方法由 XNA Framework 提供支持 WriteXml(XmlWriter, Boolean) 使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。
公共方法由 XNA Framework 提供支持 WriteXml(XmlWriter, XmlWriteMode) 使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema
公共方法由 XNA Framework 提供支持 WriteXml(Stream, XmlWriteMode, Boolean) 使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件,还可以选择将架构写入指定的文件。 若要写架构,请将 mode参数的值设置为 WriteSchema 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true
公共方法由 XNA Framework 提供支持 WriteXml(String, XmlWriteMode, Boolean) 使用指定的文件和 XmlWriteMode,写入 DataTable 的当前数据(还可以选择写入架构)。 若要写架构,请将 mode 参数的值设置为WriteSchema 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true
公共方法由 XNA Framework 提供支持 WriteXml(TextWriter, XmlWriteMode, Boolean) 使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true
公共方法由 XNA Framework 提供支持 WriteXml(XmlWriter, XmlWriteMode, Boolean) 使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true
公共方法由 XNA Framework 提供支持 WriteXmlSchema(Stream) 将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。
公共方法由 XNA Framework 提供支持 WriteXmlSchema(String) 将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。
公共方法由 XNA Framework 提供支持 WriteXmlSchema(TextWriter) 使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。
公共方法由 XNA Framework 提供支持 WriteXmlSchema(XmlWriter) 使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。
公共方法由 XNA Framework 提供支持 WriteXmlSchema(Stream, Boolean) 将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为true
公共方法由 XNA Framework 提供支持 WriteXmlSchema(String, Boolean) 将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为true
公共方法由 XNA Framework 提供支持 WriteXmlSchema(TextWriter, Boolean) 使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为 true
公共方法由 XNA Framework 提供支持 WriteXmlSchema(XmlWriter, Boolean) 使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。 若要保存该表及其所有子代的架构,请将 writeHierarchy参数设置为 true
页首

显示: 
  名称 说明
公共事件由 XNA Framework 提供支持 ColumnChanged 在 DataRow 中指定的 DataColumn 的值被更改后发生。
公共事件由 XNA Framework 提供支持 ColumnChanging 在 DataRow 中指定的 DataColumn 的值发生更改时发生。
公共事件由 XNA Framework 提供支持 Disposed 添加事件处理程序以侦听组件上的 Disposed 事件。 (继承自 MarshalByValueComponent。)
公共事件由 XNA Framework 提供支持 Initialized 初始化 DataTable 后发生。
公共事件由 XNA Framework 提供支持 RowChanged 在成功更改 DataRow 之后发生。
公共事件由 XNA Framework 提供支持 RowChanging 在 DataRow 正在更改时发生。
公共事件由 XNA Framework 提供支持 RowDeleted 在表中的行已被删除后发生。
公共事件由 XNA Framework 提供支持 RowDeleting 在表中的行要被删除之前发生。
公共事件由 XNA Framework 提供支持 TableCleared 清除 DataTable 后发生。
公共事件由 XNA Framework 提供支持 TableClearing 清除 DataTable 后发生。
公共事件由 XNA Framework 提供支持 TableNewRow 插入新 DataRow 时发生。
页首

显示: 
  名称 说明
公共扩展方法 AsDataView 创建并返回支持 LINQ 的 DataView 对象。 (由 DataTableExtensions 定义。)
公共扩展方法 AsEnumerable 返回一个 IEnumerable<T> 对象,其泛型参数 T 为 DataRow 此对象可用在 LINQ 表达式或方法查询中。 (由 DataTableExtensions 定义。)
页首

显示: 
  名称 说明
受保护的字段由 XNA Framework 提供支持 fInitInProgress 基础结构。检查是否正在进行初始化。 初始化发生在运行时。
页首

显示: 
  名称 说明
显式接口实现私有属性由 XNA Framework 提供支持 IListSource.ContainsListCollection 有关此成员的说明,请参见 IListSource.ContainsListCollection
显式接口实现私有方法由 XNA Framework 提供支持 IListSource.GetList 有关此成员的说明,请参见 IListSource.GetList
显式接口实现私有方法由 XNA Framework 提供支持 IXmlSerializable.GetSchema 有关此成员的说明,请参见 IXmlSerializable.GetSchema
显式接口实现私有方法由 XNA Framework 提供支持 IXmlSerializable.ReadXml 有关此成员的说明,请参见 IXmlSerializable.ReadXml
显式接口实现私有方法由 XNA Framework 提供支持 IXmlSerializable.WriteXml 有关此成员的说明,请参见 IXmlSerializable.WriteXml
页首

DataTable 是 ADO.NET 库中的核心对象。 其他使用 DataTable 的对象包括 DataSet 和 DataView

当访问 DataTable 对象时,请注意它们是按条件区分大小写的。 例如,如果一个 DataTable 被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。 但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。 一个 DataSet 可以包含两个 DataTable 对象,它们具有相同的 TableName 属性值和不同的 Namespace 属性值。 有关使用 DataTable 对象的更多信息,请参见创建 DataTable

如果正在以编程方式创建 DataTable,则必须先通过将 DataColumn 对象添加到 DataColumnCollection(通过 Columns 属性访问)中来定义其架构。 有关添加 DataColumn 对象的更多信息,请参见向数据表中添加列

若要向 DataTable 中添加行,必须先使用 NewRow 方法返回新的 DataRow 对象。 NewRow 方法返回具有 DataTable 的架构的行,就像由该表的 DataColumnCollection 定义的那样。DataTable 可存储的最大行数是 16,777,216。 有关详细信息,请参阅向数据表中添加数据

DataTable 也包含可用于确保数据完整性的 Constraint 对象的集合。 有关详细信息,请参阅数据表约束

有许多 DataTable 事件可用于确定对表进行更改的时间。 这些方法包括 RowChangedRowChangingRowDeleting 和 RowDeleted 有关可与 DataTable 一起使用的事件的更多信息,请参见处理 DataTable 事件

当创建 DataTable 的实例时,某些读/写属性将被设置为初始值。 有关这些值的列表,请参见 DataTable.DataTable 构造函数主题。

说明说明

DataSet 和 DataTable 对象从 MarshalByValueComponent 继承,并支持用于 .NET Framework 远程处理的 ISerializable 接口。 它们是唯一可用于 .NET Framework 远程处理的 ADO.NET 对象。

Topic Location
如何:创建数据表 Visual Studio 中的数据访问
如何:创建数据表 Visual Studio 中的数据访问

下面的示例创建两个 DataTable 对象和一个 DataRelation 对象,并将这些新对象添加到 DataSet 中。 这些表随后会显示在 DataGridView 控件中。

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

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

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

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

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

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

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

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

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

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

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

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

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

    dataSet.Tables.Add(table);

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

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

private void BindToDataGrid()
{
    // Instruct the DataGrid to bind to the DataSet, with the 
    // ParentTable as the topmost DataTable.
    dataGrid1.SetDataBinding(dataSet,"ParentTable");
}


此示例演示如何手动创建 DataTable 具有特定架构定义:

  • 创建多个表并定义初始的列。

  • 创建约束表。

  • 插入值并显示表。

  • 创建列表达式并显示表。

用此代码示例的 C# 和 Visual Basic 项目都可以在 开发人员。了中找到。

using System;
using System.Data;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      return orderTable;
   }

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

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

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

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

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

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

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

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

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

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


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

该类型对于多线程读操作是安全的。 您必须使任何写操作同步。











本文转载:CSDN博客