我希望允许用户将列标题移动到他们想要的顺序,然后保存这些设置,以便每次用户登录应用程序时它们都相同。我有一个没有静态标头的数据网格。它从xml文件中提取其标题。由于我没有静态标题,我如何在数据网格中保存用户设置?感谢
答案 0 :(得分:2)
http://msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx
有一种类型但与配置文件不同的文件,称为设置文件。在其中,您可以在应用程序范围或每个用户的基础上定义设置。可以把它想象成配置文件的AppSettings部分有自己的文件,并且你不仅将appSettings键入名称,还键入用户(或“应用程序”)。我想这就是你要找的东西。
请记住,加载大量有关DataGridView布局的设置会影响性能;您必须从文件系统加载设置文件,读取所有键控设置值,并调整列顺序。
编辑:响应评论,是的,它将适用于动态列名称,前提是您正确设计了设置的使用。你将如何做到这一点取决于列如何变化。如果它是本地化的东西,并且源完全相同的列可以有不同的名称用于翻译或部门行话目的,那么为该列源定义一个常量内部名称并在设置中使用它。如果用户可以选择已知列集合的子集,则尝试按正确的顺序定义单个设置,该设置是以逗号分隔的列名列表。检索时,将列表中的每个列名称与DGV中的标题相匹配,对于未出现在其中一个或另一个中的列是智能的。通过使用设置首先设置列,并在关闭窗口或退出应用程序时保存名称,可以使丢失/额外列名称的方案不太可能。这样,用户在第一次加载新应用时看到的内容与上次关闭它时的顺序相同。同样,我会避免使用实际的列标题文本,而是使用列的一些不可变ID,因为如果列标题文本必须更改,设置将变为无效,并且最好的情况下所有用户将不得不重新排序他们的列;最糟糕的情况是,如果您对不存在的列名不灵活,应用程序将完全中断。
一个警告:因为设置文件是应用程序安装的本地文件,如果用户使用应用程序的多个实例(比如桌面上的一个实例和笔记本电脑上的另一个实例)并且期望看到相同的布局,而不管从哪里开始他们登录后,设置文件不是一个好的解决方案。在这种情况下,通过将用户首选项存储在数据库等中央存储库中并在登录时检索它,可以更好地服务。