选择使用Xml工作的表

时间:2014-05-03 17:18:10

标签: c# sql xml datagridview

我目前正在使用Xml项目开发.NET项目。项目的开始非常简单。我必须有一个表单标题,控件,表单布局,用于访问和操作配置文件中设置的数据等的存储过程/查询。

我的问题是我的表单应该足够通用,以便更新应用程序以处理其他一些数据(仍然是“一对多关系”)归结为更新配置文件。

例如,我有2个datagridviews:一个用于父记录,一个用于子记录。它们之间的关系是一对多。我有2对这样的类型:第一对是:大陆(父表)和城市(子表)。第二对:开发人员(父表)和游戏(子表)。基本上我想要的是使用Xml文件,以便在表格之间切换,使表格显示大陆和城市,切换后,它将显示开发人员和游戏。 我是XML Files的新手。是的,我已经阅读了教程,但他们只帮助我完成基本的东西(比如我上面提到的项目的第一部分)。 如果你能给我一些想法(不一定是代码),我会非常感激。

第一个父子对的部分Xml文件(不确定是否有帮助):

<?xml version="1.0" encoding="utf-8" ?>
<Form>
  <connectionString>Data Source=dd-PC;Initial Catalog=exemplu;Integrated      Security=True</connectionString>

  <primaryAdapter>
    <SelectCommand>
      <CommandText>Select id as [ID],nume as [Nume] from Continente</CommandText>
    </SelectCommand>
  </primaryAdapter>

  <secondaryAdapter>
    <SelectCommand>
      <CommandText>select id_tara as [ID],id_continent as [Continent],nume as [Nume] from Tari</CommandText>
    </SelectCommand>
  </secondaryAdapter>

  <Bindings>
    <DataMember>ID</DataMember>
    <DataMember>Continent</DataMember>
    <DataMember>Nume</DataMember>
  </Bindings>
etc.

P.S。我被允许使用一个xml文件。

谢谢,我希望我很清楚。

1 个答案:

答案 0 :(得分:0)

你的XML并没有显示城市,正如你所说,这是它的第一个亲子视图。

其次,每个对都应该包含在标记中,例如<Table>,如果它们在<Parent><Child>标记中分别具有相似的项目,则可能包含在每个对中。

然后,如果内部标签始终相同,您可以使用同一个类来获取信息,使其直接放入您的表单。

如:

Table[] tables = XElement.Load(file)
                        .Elements("Table")
                        .Select(table => new Table(table))
                        .ToArray();

然后每个表都有一个父类和一个类的子类,无论你想要什么类型来读取它的数据。如果它们具有相同的元素,它们应该是同一个类,否则你将需要两个不同的类。

表格最低限度:

public class Table
{
    public readonly XElement element;

    public Table(XElement element){ this.element = element; }

    public int Id { get { return (int)element.Attribute("Id"); } }

    public MyPair Parent
    { get { return _Parent ?? (_Parent = new MyPair(element.Element("Parent"))); } }
    MyPair _Parent;

    public MyPair Child
    { get { return _Child ?? (_Child = new MyPair(element.Element("Child"))); } }
    MyPair _Child;
}

MyPair类似于:

public class MyPair
{
    public readonly XElement element;

    public MyPair(XElement element){ this.element = element; }

    public string[] Adapters
    { 
         get 
         { 
             return _Adapters ?? (_Adapters = element.Descendants("CommandText")
                                                     .Select(ct => (string)ct)
                                                     .ToArray());
         }
    } 
    string[] _Adapters;


    public string[] Members
    { 
         get 
         { 
             return _Members ?? (_Members = element.Descendants("DataMember")
                                                   .Select(dm => (string)dm)
                                                   .ToArray());
         }
    } 
    string[] _Members;  
}