【问题标题】:Datagrid usage sourced from SQL server源自 SQL Server 的 Datagrid 使用情况
【发布时间】:2010-09-13 04:23:31
【问题描述】:

我想知道使用链接到数据表组合(连接)的 datagrid 控件的最佳方式,同时允许显示、在基础表中创建新行和删除。

datagrid 似乎提供了后一种功能,但我还没有找到一种让我满意的方法来做的不仅仅是显示在一个网格上并提供特定的单独编辑创建和删除功能。

为了便于说明,假设数据库包含:-

客户表
* 客户ID
* 客户名称

订单表
* 客户ID
* OrderLineItem
* 订单线数量

并且我想丢失 CustomerID 以用于显示目的,但希望能够创建新客户并删除现有客户,可能需要一个确认对话框。

【问题讨论】:

    标签: c# sql winforms


    【解决方案1】:

    如果关系是一对多,您可以走使用 Master Detail 的路线。 [链接文字][1]

    [1]:http://msdn.microsoft.com/en-us/library/aa479344.aspx/"主细节"

    【讨论】:

    • 我可以看到这如何允许显示,但不允许编辑或删除。例如,假设订单行是正确的,但它应该属于不同的新客户!
    【解决方案2】:

    如果我正确理解了您的问题,您的查询将执行多个表的连接,这些表显示在一个网格上。您希望用户能够操作该网格并让基础表反映更改。

    解决这个问题的一种方法是实现存储过程来执行CRUD操作。存储过程将包含从所有必需表中插入、更新和删除记录的逻辑。每个过程都需要为网格上的每个绑定字段提供一个参数。将过程设置为数据源上的插入、更新和删除命令。

    想象一下,如果您要向网格中添加一条新记录。网格调用插入命令,将参数传递给存储过程。然后在存储过程中,您将创建逻辑来确定网格中的新行是否需要新客户,或者它是否是现有客户,然后相应地调整操作。

    【讨论】:

      【解决方案3】:

      CSharpAtl 是正确的,使用 Master-Detail 控件。 http://msdn.microsoft.com/en-us/library/y8c0cxey.aspx 是一个在 WinForm 应用程序中使用的示例。

      WinForm DataGrids 支持主记录和详细记录的添加、编辑和删除。至于您关于更改详细记录以使其与新主记录匹配会发生什么的问题;这是不可能的。根据设计,明细行仅包含与主记录匹配的记录,您不能(例如)将订单更改为属于新客户,因为明细行不包含任何客户信息。

      如果你想将一个 Detail 行移动到另一个 Master,你必须为新的 Master 创建一个新的 Detail 行,从旧的 Detail 行复制数据,并删除旧的 Detail 行。如果您有野心,您可以支持剪切和粘贴或拖放详细信息行,但在内部您必须创建/复制/删除。

      【讨论】:

        猜你喜欢
        • 2020-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多