数据表 编辑

数据表数据表

是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。其他使用DataTable的对象包括DataSet和DataView。

基本信息

编辑
DataTable 是一个临时保存数据的网格虚拟表(表示内存中数据的一个表)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。

其他使用DataTable的对象包括DataSet和DataView。

注意事项

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

用法介绍

编辑
创建 DataTable

DataTable 表示一个内存内关系数据的表,可以独立创建和使用,也可以由其他 .NET Framework 对象使用,最常见的情况是作为 DataSet 的成员使用。

可以使用相应的 DataTable 构造函数创建 DataTable 对象。 可以通过使用 Add 方法将其添加到 DataTable 对象的 Tables 集合中,将其添加到 DataSet 中。

也可以通过以下方法创建 DataTable 对象:使用 DataAdapter 对象的 Fill 方法或 FillSchema 方法在 DataSet 中创建,或者使用 DataSet 的 ReadXml、ReadXmlSchema 或InferXmlSchema 方法从预定义的或推断的 XML 架构中创建。 请注意,将一个 DataTable 作为成员添加到一个 DataSet 的 Tables 集合中后,不能再将其添加到任何其他 DataSet 的表集合中。

初次创建 DataTable 时,是没有架构(即结构)的。 要定义表的架构,必须创建 DataColumn 对象并将其添加到表的 Columns 集合中。 您也可以为表定义主键列,并且可以创建Constraint 对象并将其添加到表的 Constraints 集合中。 在为 DataTable 定义了架构之后,可通过将 DataRow 对象添加到表的 Rows 集合中来将数据行添加到表中。

创建 DataTable 时,不需要为 TableName 属性提供值,您可以在其他时间指定该属性,或者将其保留为空。 但是,在将一个没有 TableName 值的表添加到 DataSet 中时,该表会得到一个从“Table”(表示 Table0)开始递增的默认名称 Tablen。

DataTable 架构定义

表的架构(即结构)由列和约束表示。 使用 DataColumn 对象以及 ForeignKeyConstraint 和 UniqueConstraint 对象定义 DataTable 的架构。 表中的列可以映射到数据中的列、包含从表达式计算所得的值、自动递增它们的值,或包含主键值。

按名称引用表中的列、关系和约束是区分大小写的。 因此,一个表中可以存在两个或两个以上名称相同(但大小写不同)的列、关系或约束。 例如,您可以有 Col1 和 col1。 在这种情况下,按名称引用某一列就必须完全符合该列名的大小写,否则会引发异常。 例如,如果表 myTable 包含列 Col1 和列 col1,就要以 myTable.Columns 的形式来按名称引用 Col1,而以 myTable.Columns 的形式按名称引用col1。 尝试以 myTable.Columns 的形式来引用其中某列就会产生异常。

如果某个特定名称只存在一个列、关系或约束,则不应用区分大小写规则。 也就是说,如果表中没有其他的列、关系或约束对象与该特定列、关系或约束对象的名称匹配,您就可以使用任意的大小写来按名称引用该对象,并且不会引发异常。 例如,如果表中只有 Col1,您就可以使用 my.Columns 来引用。

在 DataTable 中处理数据

在 DataSet 中创建 DataTable 之后,您执行的活动可以与使用数据库中的表时执行的活动相同。 您可以添加、查看、编辑和删除表中的数据;可以监视错误和事件;并且可以查询表中的数据。 在修改 DataTable 中的数据时,您也可以验证更改是否正确,并决定是否以编程方式接受更改或拒绝更改。

  • 向数据表中添加数据

  • 说明如何创建新行并将它们添加到表中。

  • 查看数据表中的数据

  • 说明如何访问行中的数据,包括数据的原始版本和当前版本。

  • Load 方法

  • 说明如何通过 Load 方法使用行填充 DataTable。

  • DataTable 编辑

  • 说明如何修改行中的数据,包括挂起对行的更改,直至验证并接受了建议的更改。

  • 行状态与行版本

  • 提供有关行的不同状态的信息。

  • DataRow 删除

  • 说明如何从表中移除行。

  • 行错误信息

  • 说明如何插入每行的错误信息,帮助解决应用程序中的数据问题。

  • AcceptChanges 和 RejectChanges

  • 说明如何接受或拒绝对行的更改。

    构造函数

    初始化 DataTable 类的新实例。

    重载此成员。有关此成员的完整信息(包括语法、用法和示例),请单击重载列表中的相应名称。

    名称

    说明

    DataTable()

    不带参数初始化 DataTable 类的新实例。

    DataTable(String)

    用指定的表名初始化 DataTable 类的新实例。

    DataTable(SerializationInfo, StreamingContext)

    使用 SerializationInfo 和 StreamingContext 初始化 DataTable 类的新实例。

    DataTable(String, String)

    用指定的表名和命名空间初始化 DataTable 类的新实例。

    属性

    名称

    说明

    CaseSensitive

    指示表中的字符串比较是否区分大小写。

    ChildRelations

    获取此 DataTable 的子关系的集合。

    Columns

    获取属于该表的列的集合。

    Constraints

    获取由该表维护的约束的集合。

    Container

    获取组件的容器。 (继承自 MarshalByValueComponent。)

    DataSet

    获取此表所属的 DataSet。

    DefaultView

    获取可能包括筛选视图或游标位置的表的自定义视图。

    DesignMode

    获取指示组件当前是否处于设计模式的值。 (继承自 MarshalByValueComponent。)

    DisplayExpression

    获取或设置一个表达式,该表达式返回的值用于表示用户界面中的此表。 DisplayExpression 属性用于在用户界面中显示此表的名称。

    Events

    获取附加到该组件的事件处理程序的列表。 (继承自 MarshalByValueComponent。)

    ExtendedProperties

    获取自定义用户信息的集合。

    HasErrors

    获取一个值,该值指示该表所属的 DataSet 的任何表的任何行中是否有错误。

    IsInitialized

    获取一个值,该值指示是否已初始化 DataTable。

    Locale

    获取或设置用于比较表中字符串的区域设置信息。

    MinimumCapacity

    获取或设置该表最初的起始大小。

    Namespace

    获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。

    ParentRelations

    获取该 DataTable 的父关系的集合。

    Prefix

    获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。

    PrimaryKey

    获取或设置充当数据表主键的列的数组。

    RemotingFormat

    获取或设置序列化格式。

    Rows

    获取属于该表的行的集合。

    Site

    获取或设置 DataTable 的 System.ComponentModel.ISite。 (重写 MarshalByValueComponent.Site。)

    TableName

    获取或设置 DataTable 的名称。

    显式接口实现

    名称

    说明

    IListSource.GetList

    有关此成员的说明,请参见 IListSource.GetList。

    IXmlSerializable.GetSchema

    有关此成员的说明,请参见 IXmlSerializable.GetSchema。

    IXmlSerializable.ReadXml

    有关此成员的说明,请参见 IXmlSerializable.ReadXml。

    IXmlSerializable.WriteXml

    有关此成员的说明,请参见 IXmlSerializable.WriteXml。

    方法

    名称

    说明

    AcceptChanges

    提交自上次调用 AcceptChanges 以来对该表进行的所有更改。

    BeginInit

    开始初始化在窗体上使用或由另一个组件使用的 DataTable。 初始化发生在运行时。

    BeginLoadData

    在加载数据时关闭通知、索引维护和约束。

    Clear

    清除所有数据的 DataTable。

    Clone

    克隆 DataTable 的结构,包括所有 DataTable 架构和约束。

    Compute

    计算用来传递筛选条件的当前行上的给定表达式。

    Copy

    复制该 DataTable 的结构和数据。

    CreateDataReader

    返回与此 DataTable 中的数据相对应的 DataTableReader。

    CreateInstance

    基础结构。创建 DataTable 的一个新实例。

    Dispose()

    释放由 MarshalByValueComponent 使用的所有资源。 (继承自 MarshalByValueComponent。)

    Dispose(Boolean)

    释放由 MarshalByValueComponent 占用的非托管资源,还可以另外再释放托管资源。 (继承自 MarshalByValueComponent。)

    EndInit

    结束在窗体上使用或由另一个组件使用的 DataTable 的初始化。 初始化发生在运行时。

    EndLoadData

    在加载数据后打开通知、索引维护和约束。

    Equals(Object)

    确定指定的对象是否等于当前对象。 (继承自 Object。)

    Finalize

    允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 MarshalByValueComponent。)

    GetChanges()

    获取 DataTable 的副本,该副本包含自加载以来或自上次调用 AcceptChanges 以来对该数据集进行的所有更改。

    GetChanges(DataRowState)

    获取由 DataRowState 筛选的 DataTable 的副本,该副本包含上次加载以来或调用 AcceptChanges 以来对该数据集进行的所有更改。

    GetDataTableSchema

    该方法返回一个包含 Web 服务描述语言 (WSDL) 的 XmlSchemaSet 实例,该语言描述了用作 Web 服务的 DataTable。

    GetErrors

    获取包含错误的 DataRow 对象的数组。

    GetHashCode

    作为默认哈希函数。 (继承自 Object。)

    GetObjectData

    用序列化 DataTable 所需的数据填充序列化信息对象。

    GetRowType

    基础结构。获取行类型。

    GetSchema

    基础结构。有关此成员的说明,请参见 IXmlSerializable.GetSchema。

    GetService

    获取 IServiceProvider 的实施者。 (继承自 MarshalByValueComponent。)

    GetType

    获取当前实例的 Type。 (继承自 Object。)

    ImportRow

    将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值。

    Load(IDataReader)

    通过所提供的 IDataReader,用某个数据源的值填充 DataTable。 如果 DataTable 已经包含行,则从数据源传入的数据将与现有的行合并。

    Load(IDataReader, LoadOption)

    通过所提供的 IDataReader,用某个数据源的值填充 DataTable。 如果 DataTable 已包含行,则从数据源传入的数据将根据loadOption 参数的值与现有的行合并。

    Load(IDataReader, LoadOption, FillErrorEventHandler)

    通过所提供的使用错误处理委托的 IDataReader 用某个数据源中的值填充 DataTable。

    LoadDataRow(Object, Boolean)

    查找和更新特定行。 如果找不到任何匹配行,则使用给定值创建新行。

    LoadDataRow(Object, LoadOption)

    查找和更新特定行。 如果找不到任何匹配行,则使用给定值创建新行。

    MemberwiseClone

    创建当前 Object 的浅表副本。 (继承自 Object。)

    Merge(DataTable)

    将指定的 DataTable 与当前的 DataTable 合并。

    Merge(DataTable, Boolean)

    将指定的 DataTable 与当前的 DataTable 合并,指示是否在当前的 DataTable 中保留更改。

    Merge(DataTable, Boolean, MissingSchemaAction)

    将指定的 DataTable 与当前的 DataTable 合并,指示是否在当前的 DataTable 中保留更改以及如何处理缺失的架构。

    NewRow

    创建与该表具有相同架构的新 DataRow。

    NewRowArray

    基础结构。返回 DataRow 的数组。

    NewRowFromBuilder

    从现有的行创建新行。

    OnColumnChanged

    引发 ColumnChanged 事件。

    OnColumnChanging

    引发 ColumnChanging 事件。

    OnPropertyChanging

    引发 PropertyChanged 事件。

    OnRemoveColumn

    通知 DataTable:DataColumn 正在被移除。

    OnRowChanged

    引发 RowChanged 事件。

    OnRowChanging

    引发 RowChanging 事件。

    OnRowDeleted

    引发 RowDeleted 事件。

    OnRowDeleting

    引发 RowDeleting 事件。

    OnTableCleared

    引发 TableCleared 事件。

    OnTableClearing

    引发 TableClearing 事件。

    OnTableNewRow

    引发 TableNewRow 事件。

    ReadXml(Stream)

    使用指定的 Stream 将 XML 架构和数据读入 DataTable。

    ReadXml(String)

    将指定文件中的 XML 架构和数据读入 DataTable 中。

    ReadXml(TextReader)

    使用指定的 TextReader 将 XML 架构和数据读入 DataTable。

    ReadXml(XmlReader)

    使用指定的 XmlReader 将 XML 架构和数据读入 DataTable。

    ReadXmlSchema(Stream)

    使用指定流将 XML 架构读入 DataTable 中。

    ReadXmlSchema(String)

    将指定文件中的 XML 架构读入 DataTable 中。

    ReadXmlSchema(TextReader)

    使用指定的 TextReader 将 XML 架构读入 DataTable 中。

    ReadXmlSchema(XmlReader)

    使用指定的 XmlReader 将 XML 架构读入 DataTable 中。

    ReadXmlSerializable

    基础结构。从 XML 流中读取。

    RejectChanges

    回滚自该表加载以来或上次调用 AcceptChanges 以来对该表进行的所有更改。

    Reset

    将 DataTable 重置为其初始状态。 重置将移除表的所有数据、索引、关系和列。 如果数据集包含一个数据表,则在重置该表之后,它将仍是数据集的一部分。

    Select()

    获取所有 DataRow 对象的数组。

    Select(String)

    获取按与筛选条件相匹配的所有 DataRow 对象的数组。

    Select(String, String)

    获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。

    Select(String, String, DataViewRowState)

    获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。

    ToString

    获取 TableName 和 DisplayExpression(如果有一个用作连接字符串)。 (重写 MarshalByValueComponent.ToString()。)

    WriteXml(Stream)

    使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。

    WriteXml(String)

    使用指定的文件以 XML 格式写入 DataTable 的当前内容。

    WriteXml(TextWriter)

    使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。

    WriteXml(XmlWriter)

    使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。

    WriteXml(Stream, Boolean)

    使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。

    WriteXml(Stream, XmlWriteMode)

    使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件,还可以选择将架构写入指定的文件。 若要写架构,请将mode 参数的值设置为 WriteSchema。

    WriteXml(String, Boolean)

    使用指定的文件以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为true。

    WriteXml(String, XmlWriteMode)

    使用指定的文件和 XmlWriteMode,写入 DataTable 的当前数据(还可以选择写入架构)。 若要写架构,请将 mode 参数的值设置为 WriteSchema。

    WriteXml(TextWriter, Boolean)

    使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。

    WriteXml(TextWriter, XmlWriteMode)

    使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。

    WriteXml(XmlWriter, Boolean)

    使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。

    WriteXml(XmlWriter, XmlWriteMode)

    使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。

    WriteXml(Stream, XmlWriteMode, Boolean)

    使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件,还可以选择将架构写入指定的文件。 若要写架构,请将mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。

    WriteXml(String, XmlWriteMode, Boolean)

    使用指定的文件和 XmlWriteMode,写入 DataTable 的当前数据(还可以选择写入架构)。 若要写架构,请将 mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。

    WriteXml(TextWriter, XmlWriteMode, Boolean)

    使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。

    WriteXml(XmlWriter, XmlWriteMode, Boolean)

    使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。

    WriteXmlSchema(Stream)

    将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。

    WriteXmlSchema(String)

    将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。

    WriteXmlSchema(TextWriter)

    使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。

    WriteXmlSchema(XmlWriter)

    使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。

    WriteXmlSchema(Stream, Boolean)

    将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为 true。

    WriteXmlSchema(String, Boolean)

    将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为 true。

    WriteXmlSchema(TextWriter, Boolean)

    使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。 若要保存该表及其所有子代的架构,请将 writeHierarchy参数设置为 true。

    WriteXmlSchema(XmlWriter, Boolean)

    使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。 若要保存该表及其所有子代的架构,请将writeHierarchy 参数设置为 true。

    扩展方法

    名称

    说明

    AsDataView

    创建并返回支持 LINQ 的 DataView 对象。 (由 DataTableExtensions 定义。)

    AsEnumerable

    返回一个 IEnumerable<T> 对象,其泛型参数 T 为 DataRow。 此对象可用在 LINQ 表达式或方法查询中。 (由 DataTableExtensions 定义。)

    DataTable 事件

    名称

    说明

    ColumnChanged

    在 DataRow 中指定的 DataColumn 的值被更改后发生。

    ColumnChanging

    在 DataRow 中指定的 DataColumn 的值发生更改时发生。

    Disposed

    添加事件处理程序以侦听组件上的 Disposed 事件。 (继承自 MarshalByValueComponent。)

    Initialized

    初始化 DataTable 后发生。

    RowChanged

    在成功更改 DataRow 之后发生。

    RowChanging

    在 DataRow 正在更改时发生。

    RowDeleted

    在表中的行已被删除后发生。

    RowDeleting

    在表中的行要被删除之前发生。

    TableCleared

    清除 DataTable 后发生。

    TableClearing

    清除 DataTable 后发生。

    TableNewRow

    插入新 DataRow 时发生。

  • 实例化添加列

    编辑
    DataTable dt = new DataTable();

    dt.Columns.Add("ID");

    dt.Columns.Add("Name");

    DataRow dr = dt.NewRow();

    object objs = { 1, "Name" };

    dr.ItemArray = objs;

    dt.Rows.Add(dr);

    this.dataGridView1.DataSource = dt;

    使用技巧

    编辑

    (1)CreateaDataTable DataTabledt=newDataTable("Table_AX"); (2)AddcolumnsforDataTable //Method1 dt.Columns.Add("column0",System.Type.GetType("System.String")); //Method2 DataColumndc=newDataColumn("column1",System.Type.GetType("System.Boolean")); dt.Columns.Add(dc); (3)AddrowsforDataTable //Initializetherow DataRowdr=dt.NewRow(); dr="AX"; dr=true; dt.Rows.Add(dr); //Doesn'tinitializetherow DataRowdr1=dt.NewRow(); dt.Rows.Add(dr1); (4)Selectrow //Searchthesecondrow如果没有赋值,则用isnull来select DataRowdrs=dt.Select("column1isnull"); DataRowdrss=dt.Select("column0='AX'"); (5)CopyDataTableincludedata DataTabledtNew=dt.Copy(); (6)CopyDataTableonlyscheme DataTabledtOnlyScheme=dt.Clone(); (7)Operateonerow //对dt的操作 //Method1 DataRowdrOperate=dt.Rows; drOperate="AXzhz"; drOperate=false; //Method2 drOperate="AXzhz"; drOperate=false; //Method3 dt.Rows="AXzhz"; dt.Rows=false; //Method4 dt.Rows="AXzhz"; dt.Rows=false; (8)EvaluateanotherDataTable'srowtocurrentDatatable dtOnlyScheme.Rows.Add(dt.Rows.ItemArray); (9)Converttostring System.IO.StringWritersw=newSystem.IO.StringWriter(); System.Xml.XmlTextWriterxw=newSystem.Xml.XmlTextWriter(sw); dt.WriteXml(xw); strings=sw.ToString(); (10)FilterDataTable dt.DefaultView.RowFilter="column1<>true"; dt.DefaultView.RowFilter="column1=true"; (11)Sortrow dt.DefaultView.Sort="ID,NameASC"; dt=dt.DefaultView.ToTable(); (12)BindDataTable //绑定的其实是DefaultView gvTestDataTable.DataSource=dt; gvTestDataTable.DataBind(); (13)judgetheDataTable’sColumnnameisastring //判断一个字符串是否为DataTable的列名 dtInfo.Columns.Contains("AX"); (14)DataTableconverttoXMLandXMLconverttoDataTable protectedvoidPage_Load(objectsender,EventArgse) { DataTabledt_AX=newDataTable(); //dt_AX.Columns.Add("Sex",typeof(System.Boolean)); //DataRowdr=dt_AX.NewRow(); //dr=true; //dt_AX.Rows.Add(dr); stringxml=ConvertBetweenDataTableAndXML_AX(dt_AX); DataTabledt=ConvertBetweenDataTableAndXML_AX(xml); } publicstringConvertBetweenDataTableAndXML_AX(DataTabledtNeedCoveret) { System.IO.TextWritertw=newSystem.IO.StringWriter(); //ifTableNameisempty,WriteXml()willthrowException. dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName; dtNeedCoveret.WriteXml(tw); dtNeedCoveret.WriteXmlSchema(tw); returntw.ToString(); } publicDataTableConvertBetweenDataTableAndXML_AX(stringxml) { System.IO.TextReadertrDataTable=newSystem.IO.StringReader(xml.Substring(0,xml.IndexOf("<?xml"))); System.IO.TextReadertrSchema=newSystem.IO.StringReader(xml.Substring(xml.IndexOf("<?xml"))); DataTabledtReturn=newDataTable(); dtReturn.ReadXmlSchema(trSchema); dtReturn.ReadXml(trDataTable); returndtReturn; }

    数据复制

    编辑
    把datatable的结构全部数据或部分数据复制到一个新的datatable

    datatable复制表结构:我们可以使用.clone()方法;

    DataTable oldDT = GetDataTable();

    DataTable newDT = oldDT.Clone();

    把datatable中的所有信息复制到一个新的datatable,包括结构和数据:

    DataTable oldDT = GetDataTable();

    DataTable newDT = oldDT.Copy();

    复制datatable中的某一行:我们可以使用.ImportRow()方法;

    DataTable oldDT = GetDataTable();

    DataTable newDT = new DataTable();

    newDT.ImportRow(oldDT.Rows);把原来datatable中的第二行数据复制到新的datatable中。