65.9K
CodeProject 正在变化。 阅读更多。
Home

如何将 CollectionBase 转换为 DataSet

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.93/5 (15投票s)

2005年5月3日

viewsIcon

110244

downloadIcon

823

一篇关于将集合基类转换为 DataSet 的文章。

Screenshot - CollectionBaseToDataSet.GIF

引言

本文档展示了如何将一个集合基类转换为 DataSet。它使用了 System.ReflectionSystem.Collection 命名空间。

背景

有时我们需要将集合基类转换为 DataSet,并且需要使用 DataSet 的功能,例如过滤、排序等,而这些功能在集合基类中不可用。因此我编写了这段代码。希望它能帮助其他开发者。

使用代码

首先,你需要创建一个继承自 CollectionBaseCustom 的类。CollectionBaseCustom 继承自 System.Collection.CollectionBase。你可以在上面的源代码中找到它。

using System;

[Serializable]
public class Book
{
    public Book()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    private string _BookId;
    public string BookId
    {
        get
        {
            return _BookId;
        }
        set
        {
            _BookId = value;
        }
    }

    private string _BookName;
    public string BookName
    {
        get
        {
            return _BookName;
        }
        set
        {
            _BookName = value;
        }
    }

    private string _BookAuthor;
    public string BookAuthor
    {
        get
        {
            return _BookAuthor;
        }
        set
        {
            _BookAuthor = value;
        }
    }
}

public class BookCollection:CollectionBaseCustom
{
    public void Add(Book oBook)
    {
        this.List.Add(oBook);
    }
    public Book this[Int32 Index]
    {
        get
        {
            return (Book)this.List[Index];
        }
        set
        {
            if (!(value.GetType().Equals(typeof(Book))))
            {
                throw new Exception("Type can't be converted");
            }
            this.List[Index] = value;
        }
    }
}

现在你可以用数据填充集合了

private BookCollection FillData()
{
    BookCollection oBookCollection = new BookCollection();

    for(int i = 0; i < 100; i++)
    {
        Book oBook = new Book();
        oBook.BookId = i.ToString();
        oBook.BookName = "Name" + i.ToString();
        oBook.BookAuthor = "Author" + i.ToString();

        oBookCollection.Add(oBook);
    }
    return oBookCollection;
}

当你需要将集合基类转换为 DataSet 并将其绑定到 DataGrid 时,只需编写以下代码

this.grdForm.DataSource = FillData().ToDataSet().Tables[0].DefaultView;

之后,你可以像这样使用 DataSet 的所有功能,例如过滤!很简单,对吧?

if (this.grdForm.DataSource != null)
{
    DataView oDataView = (DataView)this.grdForm.DataSource;
    oDataView.RowFilter = "BookId > 22 AND BookId < 88 ";

    this.grdForm.DataSource = oDataView.Table.DefaultView;
}

历史

  • 2005年5月3日 -- 发布原始版本
  • 2007年5月10日 -- 更新
  • 2005年5月27日 -- 文章已移动
  • 2007年6月15日 -- 更新了演示项目下载
© . All rights reserved.