代码之家  ›  专栏  ›  技术社区  ›  Daniel Schaffer

Winforms-自定义XML编辑器

  •  1
  • Daniel Schaffer  · 技术社区  · 15 年前

    我创建了一个基于html/javascript的小型web应用程序,可以从xml文件中读取数据。

    现在,我需要为这个xml文件创建一个离线的winforms编辑器。我完全知道,使用xml文件以我所做的方式存储数据远不是理想的方式,但是需求是这样的,我只能对web站点使用静态文件,尽管xml文件在更新时可以被替换。

    mini-web应用程序允许正在购买远程汽车起动机的客户选择其车辆的品牌、型号和年份,并显示安装所需的附加组件列表。这些数据用XML表示为 <vehicle> 元素,其属性表示制造商、型号、年份以及每种组件类型的属性。

    对编辑的要求是:

    • 在网格中显示车辆记录
    • 允许根据已输入的值在每列中自动完成
    • 允许基于列的任意组合进行行筛选

    我试过以下方法:

    • 使用datagridview和databinding,但是databinding/datasets/etc似乎不想很容易地使用xml文件作为数据源。经过几个小时的努力,我放弃了
    • 创建我自己的自定义“行”控件,并将每个元素的实例插入到面板控件中。由于有几百个车辆记录,这是一个性能原因不启动。

    我通常是一个网络人,所以这个winforms的东西对我来说是未知的领域。完成此编辑器要求的最简单方法是什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community basarat    7 年前

    我认为最明智的方法不是创建一个包含大量较小的用户控件来表示每个元素的用户控件,而是封装逻辑,以便将元素可视化地表示为负责将其数据呈现到单个图形上的类。urface(与在用户控件中封装逻辑相反)。

    既然您已经创建了一个“row”控件(我认为,它具有编辑功能),那么您仍然可以通过创建它的一个实例并在用户单击它时将它“浮动”在控件上来利用它。

    对一个有点类似的问题的早期回答是:

    Need help creating control to display data

    说明了基本原理。您可以使用这种方法编辑非常大的xml文档,一次只实例化两个控件。

        2
  •  0
  •   Eric J.    15 年前

    您可以考虑将XML文件读入内存并基于该XML文件创建类型化数据集。如果可以控制XML文件的格式,可以从类型化数据集开始,将其序列化为XML以获取结构模板,然后从那时起以其他方式工作…编辑XML文件并通过从XML文件反序列化来加载数据集。

    This article 讨论类型化数据集和datagridview,并提供如何筛选输入的很好的示例。

    最后,你可能想看看 Krypton Toolkit . 它们的控件通常比它们所替代的同类现成的winforms控件更强大。我相信他们可能已经为datagridview实现了自动完成(当然是为textbox实现的)。如果你使用它,你实际上会下载他们的免费工具包和他们的商业工具。请确保只引用工具包dll,除非您打算购买它们的完整产品。