去除DataTable中的重复行

来源:互联网 发布:c语言现代方法 编辑:程序博客网 时间:2024/04/28 01:51

      在开发过程中,我们有时候会遇到这样或那样的情况以至于DataTable中存在重复行,但是我们有想要去掉这些重复行,我们可以采用如下方法,以代替复杂的循环判断。

 

 

      之后再用新的dtGrid替换DataSet中相应的DataTable即可。

 

      在这个过程中,我们用到了DataView提供的重载方法ToTable。以下内容来源于http://msdn.microsoft.com/zh-cn/library/a8ycds2f.aspx。

 

1、ToTable()方法

返回值

类型:System.Data..::.DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

 

备注

 

由于此方法不允许指定输出 DataTable 的名称,因此其名称与源 DataTable 相同。由于此方法不允许指定可用列的子集,因此输出表与输入表包含相同的列。 

 

示例

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,并根据原始数据创建一个筛选视图,最后创建一个包含筛选出的行的 DataTable

 

 

 

该示例在控制台窗口中显示以下文本:


Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12

 

Current Values in View
2, Fruit, Orange, 27
3, Bread, Muffin, 23

 

Table created from filtered DataView
2, Fruit, Orange, 27
3, Bread, Muffin, 23

New table name: NewTable 

 

 

2、ToTable(String)方法

参数

tableName
类型:System..::.String
返回的 DataTable 的名称。

返回值

类型:System.Data..::.DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

备注

 

由于此方法不允许指定可用列的子集,因此输出表与输入表包含相同的列。

 

示例

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,并根据原始数据创建一个筛选视图,最后用一个新名称创建包含筛选出的行的 DataTable。 

 

 

该示例在控制台窗口中显示以下文本:

 
Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12

 

Current Values in View
2, Fruit, Orange, 27
3, Bread, Muffin, 23

 

Table created from filtered DataView
2, Fruit, Orange, 27
3, Bread, Muffin, 23

New table name: FilteredTable

 

3、ToTable(Boolean,String[])方法 

参数

distinct
类型:System..::.Boolean
如果为 true,则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false
columnNames
类型:array<System..::.String >[]()[]
一个字符串数组,包含要包括在返回的 DataTable 中的列名的列表。 DataTable 包含指定的列,其顺序与这些列在该数组中的顺序相同

返回值

类型:System.Data..::.DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

 

备注

 

由于此方法不允许指定输出 DataTable 的名称,因此其名称与源 DataTable 的名称相同。

 

 

 

 

 

 

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,对 DataView 进行排序,最后创建一个仅包含两个列的 DataTable,这两个列仅限于所有值都唯一的行。

 

 

 

 

 

 

该示例在控制台窗口中显示以下文本:

 
Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
6, Bread, Croissant, 23

 

Current Values in View
3, Bread, Muffin, 23
6, Bread, Croissant, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
1, Fruit, Apple, 14
2, Fruit, Orange, 27

 

Table created from sorted DataView
Bread, 23
Fish, 12
Fish, 15
Fruit, 14
Fruit, 27

 

New table name: NewTable

 

4、ToTable(String,Boolean,String[])方法

参数

tableName
类型:System..::.String
返回的 DataTable 的名称。
distinct
类型:System..::.Boolean
如果为 true,则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false
columnNames
类型:array<System..::.String >[]()[]
一个字符串数组,包含要包括在返回的 DataTable 中的列名的列表。DataTable 包含指定的列,其顺序与这些列在该数组中的顺序相同。

返回值

类型:System.Data..::.DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

如果必须检索可用列的子集中的不同的值,请使用 ToTable 方法的此重载版本,为返回的 DataTable 指定一个新名称。如果不需要不同的行或列的子集,请参见 ToTable

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,对 DataView 进行排序,最后使用新的名称创建一个仅包含两个列的 DataTable,这两个列仅限于所有值都唯一的行。

 

 

该示例在控制台窗口中显示以下输出:


Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
6, Bread, Croissant, 23

 

Current Values in View
3, Bread, Muffin, 23
6, Bread, Croissant, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
1, Fruit, Apple, 14
2, Fruit, Orange, 27

 

Table created from sorted DataView
Bread, 23
Fish, 12
Fish, 15
Fruit, 14
Fruit, 27

 

New table name: UniqueData