我在尝试提出在数据库中存储动态生成的网格的最佳方法时遇到了一些问题。我目前的情况是我有2个用户角色,为了简化我们只是称他们为管理员和客户。
管理员工作是创建需要由网站上的网格/表格中的客户填写的计划。我的问题是因为这些计划可能会有很大差异。不同的行数,不同的列数,不同的行名,不同的列名等。
我要考虑的另一件事是客户可以共享相同的计划,因此需要将计划存储为某个模板,以便能够在多个客户端之间共享。
我想出了几个选择:
另一件事也是可能的,因为客户端正在填写他们的网格(可能会持续几周)我需要能够让管理员添加和删除列和行,如果他们忘记了某些东西或相信某些东西不再相关,它反映在客户方面。
如果有人能指出我正确的方向,或者甚至告诉我,我的方法是可怕的错误,并提出更好的建议我会非常感激!
答案 0 :(得分:1)
正如您在评论中要求我更详细地一样我会尝试。问题是,你的问题实际上不是 ...所以一些相当普遍的提示:
SQL Server将XML不是您看到的字符串,而是存储在分层组织的表中。在SQL级别处理这些数据需要一些技术诀窍,但表现非常出色。如果你在C#中努力工作,这不会打扰你......
从我正在运行的一个项目中,我可以向您展示一个示例:
这是工作数据
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<YourGrid>
<YourGridRow>
<RowID>1227c0fe-cc33-416f-bb99-e03e66b907d4</RowID>
<ShortText>YourGrid 1</ShortText>
<Message>NotizBody1</Message>
<DateFrom>2013-06-24T00:00:00</DateFrom>
<DateTo>2013-06-25T00:00:00</DateTo>
</YourGridRow>
<YourGridRow>
<RowID>3c0faf74-63d9-4b83-8858-972e7f3c643d</RowID>
<ShortText>YourGrid 2</ShortText>
<Message>NotizBody2</Message>
<DateFrom>2013-06-24T00:00:00</DateFrom>
<DateTo>2013-06-25T00:00:00</DateTo>
</YourGridRow>
</YourGrid>
</Data>
可以使用一行代码从C#DataSet
创建相应的方案,并告诉引擎有关数据类型,可空性等的所有内容。
这样做,您可以定义不同的网格(甚至是多波段!)并将它们存储在Grid
表中(与XML列GridSchema
一起存储结构信息)。
工作数据位于表GridData
中,FK指向相应的Grid
和XML列Content
。
使用System.Data.DataSet
,您可以先加载架构来定义数据集的内部结构,然后可以通过加载内容来填充它。将此数据集绑定到网格控件,并将更改的数据作为单个XML存储回内容列(或GridData
中的新行,以保留旧数据的版本 - 如果需要)。
希望这会有所帮助......