我目前正在使用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文件。
谢谢,我希望我很清楚。
答案 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;
}