【问题标题】:Allow end user to create custom properties for a class. Make those properties visible to DGV允许最终用户为类创建自定义属性。使这些属性对 DGV 可见
【发布时间】:2017-04-09 03:55:04
【问题描述】:

美好的一天。 不知道该怎么说,但请留在我身边。 我有几个具有各种类型的各种属性的类的几个实例。 我的用户(我工作的非常小的企业)希望对这些变量执行自定义计算并将结果显示在新的 DGV 列中。 比如

DGV1 使用 list(of Myclass) 作为它的数据源。列是自动添加的,而不是预定义的。

一位用户想出一个他们希望在 dgv1 上始终看到的属性。 他决定这个新财产应该是 (Myclass.property1 - Myclass.property2)

我从来没有做过这种事情,也不知道从哪里开始。我知道我不可能对所有可能的属性组合进行硬编码。此外,用户还可以预见他们需要的每种组合。

它基本上需要像excel一样灵活。 我有一个逻辑树样式的自定义过滤器构建器,用于对这些对象的属性进行查询。一些用户还希望能够将这些自定义属性用作过滤器中的节点。

我什至不确定是否有办法在运行时将属性添加到类中,并且它的行为方式类似于硬编码的属性。

感谢您对此事的想法和建议。另外,如果我有什么不清楚的地方,我很抱歉。如果我需要澄清一些事情,请告诉我。 提前谢谢你。

*编辑# 我发现了Typebuiler 并正在阅读它。

【问题讨论】:

    标签: vb.net variables properties customization user-input


    【解决方案1】:

    没有真正的方法可以在运行时向类添加属性。一旦创建了一个类,它就基本上是一成不变的。

    但是,您可以有一个 Dictionary(Of String, Object) 来保存类中“属性”的名称和值。像这样制作所有属性,您可以模拟可添加和可移动的属性。然而,这仅限于对象。

    如果您还希望您的客户能够执行计算,则必须编写脚本引擎或使用脚本引擎。

    我建议使用 JavaScript 引擎。使用 JavaScript,您可以随时添加属性,并且将 JavaScript 作为一种完整的脚本语言(JS 不仅限于 Web)。 我可以建议 NiL.JS (https://github.com/nilproject/NiL.JS) 作为引擎。它速度很快,您可以轻松地将对象从 JS 转换为 .Net。

    这里是如何使用它:

    Dim o As New YourCustomObject() ' Your object (e.g. has a property x (double))
    o.x = 5.0
    Dim c As New Context() ' Create a new JS environment
    c.DefineVariable("o").Assign(JSValue.Marshal(o)) ' Transfer the variable
    c.Eval("o.x = 6.0;") ' Change the value in JS and it will change in .Net
    MsgBox(o.x) ' 6.0
    

    检索在 JS 中添加的属性有点困难,但它是可能的。我建议查看 GitHub 页面上的示例。

    我不知道 Nil.JS 的许可,但那里有类似的引擎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2013-04-10
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多