Создать новый типизированный объект DataSet (c #) - PullRequest
0 голосов
/ 18 сентября 2010

Я использую DataGrid для отображения XML-файла.Источником данных Grid является типизированный набор данных (с использованием схемы)

    Assembly assembly = Assembly.GetExecutingAssembly();
    Stream stream = assembly.GetManifestResourceStream("XML_Reader.Resources.schema.xsd");
    XmlSchemaSet schemas = new XmlSchemaSet();
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas.Add(null, XmlReader.Create(stream));
    using (XmlReader reader = XmlReader.Create(xmlFile, settings))
    {
        newDataSet.ReadXml(reader);
    }
    dataGrid.DataSource = newDataSet;


Я добавил схему xsd в свой проект и использовал MSDataSetGenerator для генерации newDataSet.(VS2008).
Теперь я хочу создать новый объект DataSet для каждого прочитанного файла ( иерархический xml ).

Создание нового объекта DataSet не проблема, нотипы данных не верны, поэтому я не могу их отсортировать (особенно числовые поля).На мой взгляд, мне нужно создать новый типизированный набор данных .

Так как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2010

Наборы данных в Visual Studio Обзор -

Типизированные и нетипизированные наборы данных

Типизированный набор данных - это набор данных, который сначала создается из базового класса DataSet, а затем использует информацию из конструктора наборов данных, которая хранится в файле .xsd, для создания нового класса набора данных со строгим типом данных. Информация из схемы (таблицы, столбцы и т. Д.) Генерируется и компилируется в этот новый класс набора данных в виде набора первоклассных объектов и свойств. Поскольку типизированный набор данных наследуется от базового класса DataSet, типизированный класс принимает на себя все функциональные возможности класса DataSet и может использоваться с методами, которые принимают экземпляр класса DataSet в качестве параметра.
Нетипизированный набор данных, напротив, не имеет соответствующей встроенной схемы. Как и в типизированном наборе данных, нетипизированный набор данных содержит таблицы, столбцы и т. Д., Но они представляются только как коллекции. (Однако после создания таблиц и других элементов данных вручную в нетипизированном наборе данных вы можете экспортировать структуру набора данных в виде схемы, используя метод WriteXmlSchema набора данных.)

Да, вы можете автоматически создавать их в Visual Studio:

Или вы можете создать свои собственные строго типизированные наборы данных (это чище 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) - это форма автоматического управления памятью. Это особый случай управления ресурсами, в котором управляемым ограниченным ресурсом является память. Сборщик мусора, или просто сборщик, пытается вернуть мусор или память, занятую объектами, которые больше не используются программой. (Википедия)
0 голосов
/ 19 сентября 2010

Позвольте мне ответить на мой собственный вопрос; -))

Типизированный DataSet - это просто класс, который вы можете создать как любой другой класс. Нет ничего волшебного в том, что генерируется инструментами, эти инструменты просто генерируют классы, и вы можете использовать эти классы так же, как и другие классы.

Сделайте NewDataSet d1 = new NewDataSet(); там, где вы указали правильное имя класса вместо "NewDataSet".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...