DataSetHelper——操作DataSet的工具类

微软知识库里面有个DataSetHelper ,可以对DataSet中的DataTable进行Distinct、Group by、Join和Create。 我进行了整理,并添加了一些小的特性,代码如下:
using System;
using System.Collections;
using System.Data;

namespace Common
{
    
/// <summary>
    
/// DataSet助手
    
/// </summary>

    public class DataSetHelper
    
{
        
private class FieldInfo
        
{
            
public string RelationName;
            
public string FieldName;
            
public string FieldAlias;
            
public string Aggregate;
        }


        
private DataSet ds;
        
private ArrayList m_FieldInfo;
        
private string m_FieldList;
        
private ArrayList GroupByFieldInfo;
        
private string GroupByFieldList;

        
public DataSet DataSet
        
{
            
get return ds; }
        }


        
Construction

        
Private Methods

        
SelectDistinct / Distinct

        
Select Table Into

        
Group By Table

        
Join Tables

        
Create Table
    }
posted @ 2005-01-05 17:05 风满袖 阅读(7647) 评论(15) 编辑 收藏

 回复 引用   
#1楼 2005-07-17 16:09 arsser[未注册用户]
if ( ds != null && ds.Tables.Contains( tableName ) )
{
ds.Tables.Add( dt );
}
改了原来的代码,明显有错误么。

 回复 引用 查看   
#2楼[楼主] 2005-07-18 09:16 James      
@arsser:
thx,的确是一个明显的错误。
我的原意是:

if ( ds != null && !ds.Tables.Contains( tableName ) )
{
ds.Tables.Add( dt );
}

public DataTable Distinct(string tableName, DataTable sourceTable, string[] fieldNames)
是我自己加的方法。

我已经修改了错误的地方。
再次感谢,我太粗心了。

 回复 引用 查看   
#3楼 2006-02-23 10:42       
你应该不是实现Group by 功能吧,应该是Sort by 功能。
 回复 引用 查看   
#4楼 2006-03-06 09:06 format      
private DataTable CreateGroupByTable(string tableName, DataTable sourceTable, string fieldList)
这里是私有方法了,我参考微软的代码,这个应该是提供GroupBy功能的,应该是public吧。

 回复 引用 查看   
#5楼[楼主] 2006-03-06 14:06 风满袖      
@format

CreateGroupByTable是私有的.
SelectGroupByInto方法是共有的.

 回复 引用 查看   
#6楼 2006-04-04 04:10 梁广永      
能提供源码吗?
谢谢!
whycome@gmail.com

 回复 引用 查看   
#7楼[楼主] 2006-04-11 17:53 风满袖      
@梁广永
源码我全部贴出来了

 回复 引用   
#8楼 2006-04-17 20:53 yezie[未注册用户]
郁闷,我都是 未将对象引用设置到对象的实例
怎么用?举个简单例子

 回复 引用   
#9楼 2006-04-21 10:53 路过-疑惑[未注册用户]
public DataSetHelper(ref DataSet dataSet)
{
ds = dataSet;
}


请问为什么要传递ref参数?调用ds.Tables不出异常吗?

ref我觉得没必要 又不是值类型
 回复 引用   
#11楼 2006-10-25 09:47 ztchen[未注册用户]
不错,但明显coding的功力还欠火候,多进步吧
 回复 引用   
#12楼 2006-12-25 09:46 zfq308[未注册用户]
有VB的版本嗎?
 回复 引用   
#13楼 2007-08-27 11:03 scar[未注册用户]
一;
switch ( field.Aggregate.ToLower() )
{
case null:
case "":
case "last":


??
field.Aggregate 如果为null 则field.Aggregate.ToLower() 出错



二;

//return ( (decimal) a + (decimal) b );
改为:
return ( Convert.ToDecimal(a) + Convert.ToDecimal(b) );

不然在2003下出错



以上是个人测试结果.
谢谢共享.

 回复 引用 查看   
#14楼 2008-11-28 15:55 pcsky(进哥)      
一;
switch ( field.Aggregate.ToLower() )
{
case null:
case "":
case "last":


??
field.Aggregate 如果为null 则field.Aggregate.ToLower() 出错

经过测试,去掉.ToLower() 运行即可通过!

 回复 引用 查看   
#15楼 2009-05-18 13:20 Raymond--.NET      
SelectGroupByInto这个方式怎么调用的 好像出错了...