Visual Studio .NET 2002Visual Studio .NET 2003.NET 1.1ADO.NETWindows 2000Windows XPWindows Forms中级开发Visual StudioWindows.NETC#
如何将 CollectionBase 转换为 DataSet






2.93/5 (15投票s)
2005年5月3日

110244

823
一篇关于将集合基类转换为 DataSet 的文章。
引言
本文档展示了如何将一个集合基类转换为 DataSet
。它使用了 System.Reflection
和 System.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日 -- 更新了演示项目下载