我正在使用 SQL Server 和 Visual Studio 2019。
我正在寻找有关根据它们出现在什么视图中过滤我的文档列表(在 DataGridView 中)的最佳方法的建议。
我有 3 个数据库表,如下所示:
我已经为这篇文章简化了我的Document 表,但是DataGridView中显示的每个文档都有很多细节。
我将用于苹果的DataTable填充到DataView中,然后在我的DataGridView DataSource中使用。在填充DataTable的SQL中,我有一个自定义列,它使用JOIN来确定每个文档出现的视图,然后我根据自定义列过滤文档列表。这仅在文档仅出现在 1 个视图中时才真正有效,否则JOIN会检索文档的多个条目以覆盖每个匹配的视图。(希望这是有道理的)。
我也简化了这篇文章的视图表,如果你喜欢,一个视图可以包含子视图,即:
View 1
> Sub View 1
> Sub View 2
> Child of Sub View 2
这意味着Document可以在View中出现多次,因为它可能出现在各种Sub Views中。
我想知道我是否最好继续检索自定义列,或者我是否应该运行一个全新的SQL查询,甚至基于View 表创建一个新的DataTable / DataView。
我们的一些工作人员是远程的,而一些项目可能包含数千个文档,所以我想确保我使用了最强大的方法,同时也是一种在检索信息时造成的延迟最少并为用户提供最佳体验的方法。
我希望我已经解释了一切,让你们得到我想要实现的目标的清单。
在此先感谢您,我将不胜感激。
>
>
Edit - Following first answer post:
正如你所说,我可能解释得不够多,所以我整理了一个视觉示例来说明我正在努力实现的目标。
加载项目时,会列出所有文档,但尚未单击TreeView ,因此未应用过滤器。列出所有文件:
如果用户单击TreeView上的“视图 1 > 子视图 2 ”,它会根据CustomJOINColumn中的数据进行过滤,见下文:
如果用户在TreeView上单击“视图 1 > 子视图 1 ”或“另一个视图 > 文档”,它会再次根据CustomJOINColumn中的数据进行过滤,见下文:
如您所见,文档 D001已出现在3 个不同的视图/子视图中。
问题显示在第一张图片中。文档 D001列出了 3 次,因为它与 3 个视图/子视图相关联。我只希望Document D001在第一个列表中出现一次,但是当单击TreeView中的相应节点时,它会正确过滤,如图所示。
我希望这是有道理的。