Как получить DataType для DataType из XML - PullRequest
1 голос
/ 13 марта 2012

Как получить DataType для DataType из XML

Это мой код

string XMLReportFormat =@"<?xml version="1.0" encoding="utf-8" ?>
<Table>
    <ReportBody>
      <TableRow>
        <ID>1</ID>
        <ParentID>1</ParentID>
        <Key>First1</Key>
      </TableRow>
      <TableRow>
        <ID>4</ID>
        <ParentID>1</ParentID>
        <Key>FirstChild4</Key>
      </TableRow>
    </ReportBody>
</Table>";

StringReader sReader = new StringReader(XMLReportFormat);
DataSet ds = new DataSet();

if (sReader == null)
    return null;
ds.ReadXml(sReader);

Здесь я получаю все DataType столбцов как String. Я хочу, чтобы некоторые столбцы, такие как ID и ParentID как Integer

Ответы [ 3 ]

4 голосов
/ 17 октября 2012

Самый простой способ, который я нашел, - убедиться, что ваш DataSet читает XML-схему. Схема установит типы данных XML для вашего DataSet.

DataSet.ReadXmlSchema

т.е:.

DataSet ds = new DataSet();
ds.ReadXmlSchema(Server.MapPath("/YourSchema.xsd"));
ds.ReadXml(Server.MapPath("/YourXML.xml"));

У меня была проблема с использованием динамических данных в отчетах Microsoft, потому что все, что происходило из XML, было строкой. Я попытался скопировать элементы в новый DataSet с определенными dataTypes, но это было намного проще. Вы можете сделать так, чтобы c # записывал схему по умолчанию для любого XML-файла, который затем можно отредактировать по мере необходимости.

DataSet ds = new DataSet();
ds.ReadXml("Data.xml");
ds.WriteXmlSchema("Data.xsd");

Я знаю, что этот пост старый, но он помог мне, поэтому я поделился тем, что узнал.

0 голосов
/ 13 марта 2012

Да! Я нашел ответ.

private static DataTable CreateDataTable()
{
    DataTable dt = new DataTable("TableRow");
    dt.Columns.Add(new DataColumn("ID", typeof(int)));
    dt.Columns.Add(new DataColumn("ParentID", typeof(int)));
    return dt;
}
public static DataTable GetReportFormatFromXML(string XMLReportFormat)
{
    if (XMLReportFormat == string.Empty)
        return null;
    StringReader sReader = new StringReader(XMLReportFormat);
    DataSet ds = new DataSet();

    if (sReader == null)
        return null;
    ds.Tables.Add(CreateDataTable());
    return ds.Tables[0];
}

Эта строка помогает мне:)

ds.Tables.Add(CreateDataTable());
0 голосов
/ 13 марта 2012

извините попробуйте этот TryParse

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

  DataRow dr = ...;
  int number;
  bool result = Int32.TryParse(dr["column"], out number);
  if (result)
  {
     // is a number , you can use it        
  }
  else
  {
     // convert your data to String
  }
...