创建新的类型化数据集对象(c#)

创建新的类型化数据集对象(c#),c#,datagrid,dataset,xsd,C#,Datagrid,Dataset,Xsd,我使用DataGrid来显示xml文件。网格的数据源是一个类型化的数据集。(使用模式) 我在项目中添加了一个xsd模式,并使用MSDataSetGenerator生成了新的数据集。(VS2008)。现在我想为我读取的每个新(分层xml)文件创建一个新的数据集对象。创建一个新的数据集对象不是问题,但是数据类型不正确,因此我无法对它们进行很好的排序(特别是数字字段)。在我看来,我需要创建一个新的类型化数据集那么如何解决这个问题呢?让我回答我自己的问题;-) 类型化数据集只是一个可以像任何其他类一样实

我使用DataGrid来显示xml文件。网格的数据源是一个类型化的数据集。(使用模式)



我在项目中添加了一个xsd模式,并使用MSDataSetGenerator生成了新的数据集。(VS2008)。
现在我想为我读取的每个新(分层xml)文件创建一个新的数据集对象。
创建一个新的数据集对象不是问题,但是数据类型不正确,因此我无法对它们进行很好的排序(特别是数字字段)。在我看来,我需要创建一个新的类型化数据集

那么如何解决这个问题呢?

让我回答我自己的问题;-)

类型化数据集只是一个可以像任何其他类一样实例化的类。工具生成的任何东西都没有魔力,这些工具只是生成类,您可以像使用其他类一样使用这些类。

Do
NewDataSet d1=new NewDataSet()在此处输入正确的类名,而不是“NewDataSet”。

-

类型化与非类型化数据集

类型化数据集是首先从基本数据集类派生的数据集,然后使用数据集设计器中存储在.xsd文件中的信息生成新的强类型数据集类。来自模式(表、列等)的信息将作为一组一流对象和属性生成并编译到这个新的dataset类中。由于类型化数据集继承自基数据集类,因此类型化类承担数据集类的所有功能,并可与将数据集类的实例作为参数的方法一起使用。 相反,非类型化数据集没有相应的内置模式。与类型化数据集中一样,非类型化数据集包含表、列等,但这些仅作为集合公开。(但是,在非类型化数据集中手动创建表和其他数据元素后,可以使用数据集的WriteXmlSchema方法将数据集的结构导出为架构。) 是的,您可以使用Visual Studio自动生成这些:

或者,您可以创建自己的强类型数据集(这是cleaner IMO)。例如:

using System.Data;

public class CatsDataTable : DataTable
{
  public CatsDataTable() : base()
  {
    base.TableName = "cats";
    Columns.Add(new DataColumn(SqlTokens.id_cats, typeof(int)));
    Columns.Add(new DataColumn(SqlTokens.owners_id_owners, typeof(int)));
    Columns.Add(new DataColumn(SqlTokens.cats_name, typeof(string)));
    Columns.Add(new DataColumn(SqlTokens.cats_number_of_spots, typeof(int)));
  }
}

public class OwnersDataTable : DataTable
{
  public OwnersDataTable() : base()
  {
    base.TableName = "owners";
    Columns.Add(new DataColumn(SqlTokens.id_owners, typeof(int)));
    Columns.Add(new DataColumn(SqlTokens.owners_name, typeof(string)));
  }
}

public class PetsDataSet : DataSet
{
  public PetsDataSet() : base()
  {
    base.TableName = "pets";
    Tables.Add("cats");
    Tables.Add("owners");
  }
}

关于垃圾收集的切线

垃圾收集(GC)是一种自动内存管理形式。这是资源管理的一种特殊情况,其中管理的有限资源是内存。垃圾收集器,或者只是收集器,尝试回收程序不再使用的对象所占用的垃圾或内存。(维基百科)

类型化数据集是在设计时创建的,而不是在运行时创建的。但是在读取新的xml文件时,我需要清除数据集。(
newDataSet.clear();
)因为我读取的是“大”(40 Mb)xml文件,所以清除数据集的速度非常慢。如何在不创建新数据集的情况下加快清除速度?找不到您请求的页面(如何:创建类型化数据集)。但是,在使用VisualStudio自动生成一个数据集之后,您可以使用该类为每个文件创建一个新的数据集。旧的将被.NET垃圾收集。@Robertico:谢谢你在我的帖子(+1)中指出错误,我已经纠正了。然而,创建类定义(无论是否使用代码生成工具)和垃圾收集是两个不同的概念,我不确定您是否理解其中的区别。我在回答中添加了几个链接。@JohnB:我理解这些概念,也使用了垃圾收集。@Robertico:你说的“并使用了垃圾收集”是什么意思?垃圾收集器是自动的。@JohnB:I使用
GC.Collect()
强制垃圾收集请求。是否、何时以及如何运行取决于公共语言运行库(CLR)。请求CLR取消分配未引用的对象。它减少了我的内存使用。
using System.Data;

public class CatsDataTable : DataTable
{
  public CatsDataTable() : base()
  {
    base.TableName = "cats";
    Columns.Add(new DataColumn(SqlTokens.id_cats, typeof(int)));
    Columns.Add(new DataColumn(SqlTokens.owners_id_owners, typeof(int)));
    Columns.Add(new DataColumn(SqlTokens.cats_name, typeof(string)));
    Columns.Add(new DataColumn(SqlTokens.cats_number_of_spots, typeof(int)));
  }
}

public class OwnersDataTable : DataTable
{
  public OwnersDataTable() : base()
  {
    base.TableName = "owners";
    Columns.Add(new DataColumn(SqlTokens.id_owners, typeof(int)));
    Columns.Add(new DataColumn(SqlTokens.owners_name, typeof(string)));
  }
}

public class PetsDataSet : DataSet
{
  public PetsDataSet() : base()
  {
    base.TableName = "pets";
    Tables.Add("cats");
    Tables.Add("owners");
  }
}