Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在保存表单之前在表单上缓存数据?_C#_Caching - Fatal编程技术网

C# 如何在保存表单之前在表单上缓存数据?

C# 如何在保存表单之前在表单上缓存数据?,c#,caching,C#,Caching,我对表单数据缓存有点问题(在实际保存到文件之前将其保存在变量中)。我有一个非常简单的表单布局: 对象组合 参数组合1 参数组合2 参数文本1 参数组合3 保存按钮 此表单用于为我的程序中的特定对象配置某些参数。所有对象的列表都在ObjectCombo中。参数位于其他表单字段中。每当我从ObjectCombo中选择另一个对象时,我都希望缓存为该对象输入的参数,直到我配置了ObjectCombo列表中的每个对象。配置完所有内容后,我想按Save按钮,以便立即保存ObjectCombo中每个对象的每个

我对表单数据缓存有点问题(在实际保存到文件之前将其保存在变量中)。我有一个非常简单的表单布局:

  • 对象组合
  • 参数组合1
  • 参数组合2
  • 参数文本1
  • 参数组合3
  • 保存按钮
  • 此表单用于为我的程序中的特定对象配置某些参数。所有对象的列表都在ObjectCombo中。参数位于其他表单字段中。每当我从ObjectCombo中选择另一个对象时,我都希望缓存为该对象输入的参数,直到我配置了ObjectCombo列表中的每个对象。配置完所有内容后,我想按Save按钮,以便立即保存ObjectCombo中每个对象的每个缓存参数

    到目前为止,我的解决方案是创建一个以int(ObjectCombo中对象的索引)为键的字典,以及另一个以参数名为键、参数值为值的字典。
    字典

    我将在ObjectCombo SelectedIndexChanged事件中进行缓存,因此当我配置最后一个元素并单击Save时,最后一个元素不会被保存,因为没有触发SelectedIndexChanged事件。当然,我可以回到ObjectCombo中的另一个对象,这样可以解决问题,但这对用户不友好。我是否可以订阅另一个事件,让我在移动到另一个对象之前缓存配置数据


    我应对这一挑战的方法是否合理?我已经把这个问题弄得一团糟一天了,我所做的一切听起来都很简单,但由于英语不是我的母语,我可能在表达自己时遇到了问题。如果任何有兴趣帮助的人在理解我想要实现的目标时遇到问题,请不要犹豫,询问更多信息

    我想最好的方法是将数据保存在隐藏字段中,您应该创建一些javascript处理程序来填充这个隐藏字段。
    如果您发布项目的代码也会更好,那么我可以提供一些实现变体。

    最好的方法是创建每个对象的克隆,并将克隆添加到组合框中。让用户一次一个地更新所有克隆对象。您可以将事件连接到每个参数控件,例如ParamText1的TextChanged。然后,当事件触发时,您将更新ObjectCombo的选定项(您需要将类型转换为实际类型,因为表面类型将是object)。ObjectCombo的SelectedIndexChanged事件只负责在用户选择不同对象时填充其他控件。每个param控件的事件将负责更新所选对象。更新控件时,请确保取消订阅SelectedIndexChanged中的param control事件,否则这些事件将意外触发

    用户更新所有(克隆的)对象并按“保存”后。只需将所有克隆数据(即缓存)复制到原始数据


    这背后的思想是,您正在“缓存”克隆对象中的用户更改,然后在保存后,将缓存的数据复制到实际对象。

    这些参数不是列出对象的属性或类变量。问题中的对象是API对象,我无法访问它们。那么你的问题就不完整了。它是内部API吗?这些API对象到底是什么?如何获取/更新它们?你能为他们制作包装吗?您应该仍然能够完成我描述的内容。这是Autodesk Revit API。所讨论的对象是FamilyType对象。我曾考虑过创建一个包装器类,但我缓存的参数仅用于以后在ERP系统中创建一些记录的代码中。这就是我还没有创建包装器类的原因。你最好的选择,也是最好的实践,就是为你的UI创建一个域模型。模型将是某个对象(可能不是包装器,而是具有类似属性的对象)。UI将填充您的模型,这些模型将位于列表中的某个位置(UI演示者/控制器)。然后,一旦用户完成填充对象(例如按Save),您就可以对其执行任何操作。您可以进行API调用,在内部使用它们,这并不重要。关键是,您正在使用内部对象规范化应用程序,然后使用这些对象将数据发送到其他系统。我想这种解决方案在我的用例(不是web应用程序)中不可行。