0

假设我必须通过读取 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>

我也想在表单中显示它。这真的可能吗?还有其他选择吗?

4

4 回答 4

1

您可以使用LINQ-XML解析 XML 文档,准备一个List<T>并使用控件显示结果- 如 DataGridView、ListView 等。

于 2012-07-30T08:45:44.050 回答
1

我的建议 - 将您的 XML 转换为强类型对象(即Room具有给定属性的对象),您可以将其加载到List<Room>.

一旦你有了它,你现在就可以通过编程方式添加删除等。

现在您需要将您的 UI 绑定到该信息 - 使用DataGridView控件是一种廉价的方法 - 与数据源一起,它将自动支持编辑和添加/重新排序/删除。

如果您想要更复杂的东西,您可以为该Room类型创建一个自定义 UserControl,然后也许另一个来充当这些类型的容器。

我不会发布任何代码,因为我认为您可以使用很多选项 - 而且您还没有真正解释过您尝试过的内容 - 更进一步最终会使这个答案变得很长!需要我的建议 - 首先了解 DataGridView,如何自定义列格式并为此提供自定义控件 - 它会让您很好地了解您可能想要从完全自己的解决方案中获得什么。

于 2012-07-31T08:16:53.443 回答
0

当然,这是可能的。

但最好的选择取决于你想用它做什么。你要编辑数据吗?还是只是展示一下?有许多选项,您可以以网格形式显示它,或者像您建议的那样,创建控件运行时。但是你必须知道哪些控件和不同数据的不同控件(标签或文本框,或者是 texbox(如果是 ID)是只读的。你将如何确定这些东西?还有当你创建控件确保您以某种方式使其可滚动,您不知道您获得了多少数据,因此您的表单可能变得无限长!

对于实际创建控件,您可以检查:http: //support.microsoft.com/kb/319266

于 2012-07-30T08:48:49.877 回答
-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

于 2012-07-30T08:51:09.710 回答