来自SQL Server的Datagrid使用情况
我想知道使用链接到数据表的组合(联接)的数据网格控件的最佳方法,即既允许显示,又可以在基础表中创建新行,也可以删除。
datagrid似乎提供了后者的功能,但是我还没有找到一种除仅显示在一个网格上并提供特定的单独的编辑创建和删除功能之外的其他方法而令我满意的方法。
为了说明起见,假设数据库包含:-
客户表
- 顾客ID
- 顾客姓名
订单表
- 顾客ID
- OrderLineItem
- OrderLineQuanity
我想失去CustomerID以便显示,但希望能够创建一个新客户并删除现有客户,也许需要一个确认对话框。
解决方案
如果该关系是一对多,则可以使用" Master Detail"。 [链接文字] [1]
[1]:http://msdn.microsoft.com/zh-CN/library/aa479344.aspx/"主详细信息"
如果我正确理解了问题,那么我们将获得一个查询,该查询执行多个表的联接,这些表将显示在单个网格上。我们希望用户能够操纵该网格并使基础表反映所做的更改。
解决此问题的一种方法是实现存储过程以执行CRUD操作。存储过程将包含从所有必需表中插入,更新和删除记录的逻辑。每个过程都需要为网格上的每个绑定字段都具有一个参数。将过程设置为数据源上的插入,更新和删除命令。
因此,假设我们要向网格中添加新记录。网格调用insert命令,将参数传递给存储过程。然后,在存储过程中,我们将创建逻辑来确定网格中的新行是否需要新客户,或者该新行是否是现有客户,然后相应地调整操作。
CSharpAtl是正确的,使用主从控件。在WinForm应用程序中使用一个示例,请参见http://msdn.microsoft.com/zh-cn/library/y8c0cxey.aspx。
WinForm DataGrids支持添加,编辑和删除主记录和明细记录。关于问题,如果更改明细记录以使其与新的主记录匹配,会发生什么情况;这是不可能的。通过设计明细行仅包含与主记录匹配的记录,我们不能(例如)将订单更改为属于新客户,因为明细行不包含任何客户信息。
如果要将明细行移动到另一个母版,则必须为新的母版创建一个新的明细行,从旧的明细行中复制数据,然后删除旧的明细行。如果我们有雄心壮志,则可以支持"剪切和粘贴"或者"拖放细节"行,但在内部必须创建/复制/删除。