【问题标题】:Choosing which table to work on using Xml使用 Xml 选择要处理的表
【发布时间】:2014-05-03 17:18:10
【问题描述】:

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

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

例如我有2个datagridviews:一个用于父记录,一个用于子记录。它们之间的关系是一对多的。我有两对这样的:第一对是:大陆(父表)和城市(子表)。第二对:Developers(父表)和 Games(子表)。基本上我想要的是使用 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.

附:我可以使用一个 xml 文件。

谢谢,我希望我说的够清楚了。

【问题讨论】:

    标签: c# sql xml datagridview


    【解决方案1】:

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

    其次,每一对都应该包含在一个标签中,例如&lt;Table&gt;,如果它们在&lt;Parent&gt;&lt;Child&gt;标签中有相似的项目,则可能是每一对。

    如果内部标签始终相同,您可以使用相同的类来获取信息,从而将其直接放入表单中。

    如:

    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;  
    }
    

    【讨论】:

    • 我认为每一对都包含在标签 中,分别是 。但在我的课堂上,我如何在各个部分之间切换? (运行问题时我不必切换它)
    • @dsanatomy 您使用不相似的标签越多,您对自己的使用就越困难。如果要识别表,请执行&lt;Table Id="1"&gt;&lt;Table Id="2"&gt; 等操作。然后很容易,获取所有表并通过其属性Id 识别哪个是哪个。
    • @dsanatomy 我修改了上面的 Table 类以显示每个表都有一个 Id 属性的示例。
    • @dsanatomy 您可以轻松地使用 Name 属性,或者您想用来识别表的任何其他标识符。
    • 谢谢 Chuck,属性想法和课程帮助了我。我现在要试试这个。
    猜你喜欢
    • 2012-12-07
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多