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

问题描述:

假设我必须通过读取XML文件来显示表单的详细信息,并根据no。我想要在窗体中显示细节的元素。是否有可能这样做?你可以在C#中以编程方式创建表单域?

例: 说我的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

另一个房间元件等Ç Shee 2012-07-30 08:44:38

+2

是。代码如何取决于你是在谈论Web还是WinForms或MVC或其他东西 – podiluska 2012-07-30 08:45:15

+1

这当然是可能的。 – ChrisF 2012-07-30 08:45:20

您可以使用LINQ-XML解析XML文档,准备List<T>,并显示使用控制结果 - 像DataGridView中,ListView控件等

当然,这是可能的。

但最好的选择取决于你想用它做什么。你要编辑数据吗?或者只是显示它?有很多选项,你可以用网格形式显示,或者像你建议的那样,创建控件运行时。但是你必须知道不同的数据(标签或文本框,也就是texbox(在ID的情况下)是只读的)的控制和可能的不同控制,你将如何确定这些东西?当你创建控制确保你让它滚动弄好了,你不知道有多少数据你得到这样的形式可以成为无限长

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

+0

我实际上做的是显示房间ID房间名称n然后为用户填充数据的组合框的面板。 – Shee 2012-07-30 09:08:44

是的,它是可能的。传统上,您会在您的Page_Init方法中循环遍历您的aspx.cs文件和用户代码,类似于下面的伪代码:

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

我的建议 - 你的XML转换成强类型的对象(所以Room对象与给定的属性),你可以加载到的List<Room>的集合。

一旦你得到了,你现在有编程来添加删除的能力等

现在,你需要你的用户界面绑定到该信息 - 一种廉价的方式将是使用DataGridView控制 - 这,结合数据源,将自动支持编辑和添加/重新排序/删除。

如果你想更复杂的东西,你可以创建适用于Room类型的定制用户控件,然后也许另一个充当一堆那些容器。

我不会发布任何代码,因为我觉得有这么多的选择,你 - 你还没有真正解释你已经尝试了什么 - 这要走得更远,最终会使得这个答案很长!希望得到我的建议 - 首先了解DataGridView,如何自定义列格式并为其提供自定义控件 - 它将为您提供一个完整的自定义解决方案所需的想法。