你可以编程在C#中创建表单域吗?

时间:2012-07-30 08:43:39

标签: c# xml winforms

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

答案 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