假设我必须通过读取XML文件来显示表单上的详细信息,并根据编号。我希望在表单中显示详细信息。是否可以这样做?
例: 假设我的XML文件包含以下内容
<Rooms>
<Room>
<Name>A</Name>
<ID>1</ID>
</Room>
<Room>
<Name>B</Name>
<ID>2</ID>
</Room>
</Rooms>
我可以在表格中显示上述细节。如果我将另一个房间元素添加到xml文件,
<Room>
<Name>C</Name>
<ID>3</ID>
<Room>
我想在表单中也显示它。这有可能吗?还有其他选择吗?
答案 0 :(得分:1)
您可以使用LINQ-XML解析XML文档,准备List<T>
并使用 Controls 显示结果 - 如DataGridView,ListView等。
答案 1 :(得分:1)
我的建议 - 将您的XML转换为强类型对象(具有给定属性的Room
对象),您可以将其加载到List<Room>
的集合中。
一旦你有了这个,你现在可以通过编程方式添加删除等。
现在您需要将UI绑定到该信息 - 一种便宜的方式是使用DataGridView
控件 - 它与数据源一起将自动支持编辑和添加/重新排序/删除
如果你想要更复杂的东西,你可以为Room
类型创建一个自定义UserControl,然后可能为另一个类型创建一个容器。
我不打算发布任何代码,因为我觉得你有很多选择 - 而且你还没有真正解释过你尝试过的东西 - 进一步说明会让这个答案很长!需要我的建议 - 首先了解DataGridView,如何自定义列格式并为其提供自定义控件 - 它可以让您从完全自己动手的解决方案中了解您的需求。
答案 2 :(得分:0)
当然,这是可能的。
但最好的选择取决于你想用它做什么。你要编辑数据吗?或只是展示它?有许多选项,您可以以网格形式显示它,或者像您建议的那样,创建控件运行时。但是你必须知道对于不同的数据(标签或文本框,或者是texbox(在ID的情况下)是只读的控件和可能不同的控件。你如何确定那些东西?当你创建时控件确保你以某种方式使它可滚动,你不知道你获得了多少数据,所以你的表单可能变得无限长!
对于实际创建控件,您可以检查:http://support.microsoft.com/kb/319266
答案 3 :(得分:-1)
是的,这是可能的。传统上,你会在aspx.cs文件的Page_Init方法中循环遍历节点,用户代码类似于下面的伪代码:
foreach(//loop specified here) {
Page.Form.Controls.Add(new TextBox() {Id = "Room" + loopValue});
}
然后在回发后你应该能够使用类似的循环访问你的动态控件来重建Id。该视频应更详细地介绍该概念。
http://www.asp.net/web-forms/videos/aspnet-ajax/how-to-dynamically-add-controls-to-a-web-page