保存infragistics列选择器更改

时间:2011-06-01 01:46:26

标签: c#-4.0 infragistics

如何在用户选择要查看C#代码的列后保存对超网格列选择器的更改

2 个答案:

答案 0 :(得分:3)

这是我过去必须处理的事情 - 所以我的答案不是特定于Infragistics而且非常通用。

我强烈建议的一件事是以非供应商特定格式保留列属性。这将花费你更多的时间,但从长远来看,它是花费的时间(额外的时间是更多的设计和思考时间,而不是开发时间)。

你需要保存什么?
以下是您可以从列中保存的一些内容:

  • width(当用户调整列的大小时)
  • 当前排序顺序
  • 当前分组
  • 任何网格或列过滤器
  • 列位置(如果允许用户移动列)
  • 列可见性

这已经成为一个相当复杂的数据对象。接下来,您需要考虑如何保留此信息:

  • 在数据库中?
  • 使用对Web服务的调用?
  • 在本地配置文件中?
  • 或这些的组合?

您还需要考虑:

  • 用户可以为同一网格保存多个布局吗?
  • 或者您的应用中是否有多个需要保存布局的网格?

这是我的建议,仔细思考并使用非供应商特定的数据对象。


让我告诉你一个关于时间的故事......

以前我必须为DevExpress ASPx网格执行此操作,此特定组件提供了一个函数,可将所有列信息序列化为字符串,然后您可以将其保存到数据库中。这一切都很容易和好 - 直到我需要开始跟踪DevExpress没有包含在该字符串中的一些列属性(我们不得不去客户端并告诉他们他们最喜欢的网格布局他们保存的并不好,他们需要重做它们以获得新版本的产品。)

所以我提出了一个新的数据对象,用于保存列的属性,让我们称之为 ColProperties ,并且网格中的每个可能列都有一个。这很棒,但我错误地在其中包含了一些DevExpress和系统特定的对象。这一切都工作了一段时间,直到我们决定使用WCF服务调用来保存和重新加载这些 ColProperties 对象,并且那些DevExpress和System对象不可序列化,因此数据对象需要再次重构,我们不得不回到客户那里告诉他们他们最喜欢的布局需要被扔掉并重做......

为了让故事更有趣,我们使用Telerik网格将应用程序从ASP.Net UI更改为Silverlight - 但我们仍然必须使用用户之前保存的相同布局。到目前为止,我们使用一个设计合理的数据对象来存储列属性和WCF调用以保持和检索布局,应用程序架构的这种巨大变化意味着零布局功能的改变(我们可以回到客户端并说“猜猜是什么 - 你仍然可以使用旧的布局!“)。

总结那个长篇故事......

现在如果你还在读这个并没有睡着,你可以说“但我的网格很简单,我只有其中一个,我不需要所有的功能” 。如果这是您的情况,那么请务必使用快速而肮脏的解决方案来保存列布局信息 但是,如果您的产品的路线图仍然是敞开的,或者您将来可能会更改您的网格(或添加更多网格),或者您可能会更改保存用户所选布局的方式,或者您可能会更改或添加更多要保存的属性,那么你需要考虑我告诉你的内容。现在花费额外几个小时来正确设计它可以为您节省很多麻烦。

答案 1 :(得分:3)

UltraGrid.DisplayLayout属性公开了许多SaveSaveAsXml方法重载,这些重载允许您将显示布局的整个状态(包括用户自定义)保存到二进制或XML文件中。然后,要加载布局文件,您可以使用LoadLoadFromXml方法重载之一,具体取决于保存的布局文件的格式。