设计应用程序以加载,编辑和保存分层数据

时间:2013-06-07 22:45:06

标签: c# sql-server winforms telerik-grid hierarchical-data

我正在编写一个将与SAP Business One集成的GUI。我很难确定如何以最佳方式加载,编辑和保存数据(可靠,快速,简单)。

我有两个名为Structures和StructureRows的表(不是很棒的名字)。结构可以包含其他结构,泛型和细节。结构行包含所有这些项,并具有与之关联的类型。泛型是特定的占位符,具体是库存中的实际项目。

作业将包含作业元数据以及n个结构。在编辑作业的屏幕上,您可以添加结构和删除结构以及编辑它们下面的行。例如,如果您将结构1添加到作业1并且结构1包含通用1,则用户可以将通用1替换为特定。

我了解如何存储数据,但我不知道加载和保存数据的最佳方法是...

我看到了几个不同的选择:

  1. 当有人向作业添加结构时,加载结构,然后递归加载其下的任何结构(已经加载了泛型和细节)。我会把这一切都放到像List这样的对象模型中,每个Structure对象都有List和List。当我将更改保存回数据库时,我将不得不手动循环数据并保留更改。
  2. 以某种方式将数据加载到SQL中的视图中,然后在客户端对数据表/数据集进行分组和排序。将数据绑定到GridView,以便更改自动反映在数据集中。当你去保存时,SQL / ADO.NET可以自动处理吗?这似乎是理想的解决方案,但我不知道如何实际实现它......
  3. 抛弃我的部分是能够为结构添加结构。如果不是这样,我会从StructureRows表中选择Specifics和Generics,并根据它们所属的Structure将它们分组到GUI中。我会将它们放在DataTable中并将其绑定到GridView,这样任何更改都会自动保存到DataTable,然后我可以转身将它们很容易地推送到SQL ...

    通过对象模型手动加载和保存数据是我唯一的选择吗?如果没有,你会怎么做?我不确定我是否只是将它变得更复杂然后需要它或者如果这对C#,ADO.NET和MS SQL实际上很难做到。

1 个答案:

答案 0 :(得分:0)

在SQLServer 2008中引入了HierarchyID数据类型来处理这种事情。我自己没有这样做,但这里有一个place to start给出了一个如何使用它的公平例子。

话虽这么说,如果你不拘泥于当前的表格,并且不需要查询单个元素(换句话说,你总是在处理整个工作),我会受到诱惑将每个作业的数据存储为XML。 (如果您正在使用基于Web的应用程序,那么您也可以使用JSON。)它保留了层次结构,.NET中有许多用于处理XML的工具。还有一个用于winForms的内置TreeView class,并且无疑可以使用其他第三方控件。