【问题标题】:DataGridView ensure application wide consistencyDataGridView 确保应用程序范围内的一致性
【发布时间】:2009-05-19 07:26:15
【问题描述】:

在我们的应用程序中,我们将有几个查找器对话框。 finder 对话框的 UI 很简单(文本框、datagridview 结果、确定按钮、取消按钮)。不同对话框之间唯一真正的变化是一些标签文本和网格绑定源。我们希望强制执行某些属性(如全行选择和只读模式)和事件(如单击和双击),以便当有人想要添加对话框时,我们知道用户将获得一致的行为,因为该对话框实现了相同的我们应用程序中所有其他对话框都实现的属性和事件。

我创建了一个基本查找器表单,其中包含一些属性和确定/取消按钮 + 它们的点击事件。我被困在datagridview上。在我们的一个查找器对话框中,确保所有数据网格视图共享相似特征的最佳方法是什么?

【问题讨论】:

    标签: winforms datagridview


    【解决方案1】:

    如果不同对话框之间的唯一区别是某个标签的文本和 datagridview 的绑定源,为什么不简单地对所有对话框使用相同的表单?您可以轻松地让表单公开属性,通过这些属性您可以控制这些差异。

    【讨论】:

    • 我不想丢失在网格上设置绑定数据源时获得的一些 Visual Studio 设计时内容。也许我应该创建一个继承自 DataGridView 的网格并强制执行这些属性和方法。
    【解决方案2】:

    今天我实现了一个继承自 DataGridView 的自定义网格 (DataGridViewFinder)。此网格仅特定于我们的查找器对话框。网格设置了默认属性,因此它与我们所有其他查找器网格一致。另外,因为我知道这种类型的网格只会出现在 finder 对话框中,所以我已经覆盖了一些将在基本 finder 上设置属性和调用方法的事件。

    我喜欢这种方法,因为它可以确保当我将自定义网格放到查找器对话框中时,某些属性和事件已经为我处理好了。会有很多查找器对话框,我怀疑这会节省很多时间。有人看到这个实现有什么问题吗?

    protected override void OnEnter(EventArgs e)
    {
        base.OnEnter(e);
        if (Parent is BaseFinder)
        {
            (Parent as BaseFinder).Mode = FinderMode.Ok;
        }
    }
    
    protected override void OnDoubleClick(EventArgs e)
    {
        base.OnDoubleClick(e);
        if (Parent is BaseFinder)
        {
            (Parent as BaseFinder).btOk_Click(this, e);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 2011-04-12
      • 2017-09-20
      • 2015-05-11
      • 1970-01-01
      • 2021-03-27
      • 2013-10-07
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多