【问题标题】:Can I restrict users from selecting a row in a DGV我可以限制用户选择 DGV 中的行吗
【发布时间】:2011-04-14 20:39:45
【问题描述】:

我有一个 winform 程序,其中有两个数据网格视图。它们是只读的,因此用户无法编辑值,并且选择模式设置为“整行”。

我的程序一次一步地运行 dgv,突出显示它正在处理的当前行。出于这个原因,我不希望用户能够单击一行并选择它。有没有我可以切换到的设置?

或者我是否必须使用 SelectionChanged 事件处理程序来检查选择的更改方式,并在用户更改选择时恢复它?如果是这种情况,我的 SelectionChanged 事件处理程序如何判断选择是通过编程方式更改还是由用户更改?

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    如果您想阻止用户选择任何行,您应该将控件的 Enabled 属性设置为 false。这将阻止它接受鼠标事件。 (即使它被禁用,您也可以调整控件颜色以使其“看起来”处于启用状态。)

    如果您想选择性地阻止用户选择某些行但允许他们选择其他行,那么您需要继承 DataGridView 并覆盖一些内容。 (我认为没有任何 DGV 事件可以让您阻止行更改;SelectionChanged 发生在 选择更改之后,并且 RowEnter 不可取消。)

    在 DGV 上有一个名为 SetSelectedRowCore 的虚拟方法,它负责实际更新给定行的选定状态。如果您覆盖此方法,您可以选择调用或不调用基本 SetSelectedRowCore() 以允许/不允许发生选择。

    【讨论】:

    • 我只是想阻止选择所有行,所以我将设置“启用”为 false。谢谢
    【解决方案2】:

    您可以将 DGV 的 Enabled 属性设置为 false。

    这具有您想要的效果,并且 DGV 在未启用时没有那种“灰显”的外观。您还可以以编程方式设置 DGV 的选定行。

    【讨论】:

      【解决方案3】:

      有一个属性叫做“CanSelect”..

      http://msdn.microsoft.com/en-us/library/system.windows.forms.control.canselect.aspx

      好像有用..

      【讨论】:

      • 它似乎是一个只读属性,它只告诉您是否可以选择控件(如果它不可见,未启用等)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多