Infragistics UltraGrid: 如何移除默认选中第一行的设置。

16

我已经将一个UltraGrid放在了一个WinForms用户控件上。 我已经调整了一些设置,以便将网格用作只读多行选择表格。 但是有一个问题:默认情况下,第一行似乎被选中。

但是Selected.Rows属性为空,并且ActiveRow属性为null

因此,该行似乎被选中,但实际上并没有,这使得无法取消选择。

我相信在UltraGrid中一定有一个隐藏的设置来控制此行为。 如果不是这种情况,那么也许有一个解决方法?

谢谢。

7个回答

22

经过一些研究,我已经找到了解决方案,现在将其分享给大家:

myUltraGrid.DisplayLayout.Override.ActiveCellAppearance.Reset();
myUltraGrid.DisplayLayout.Override.ActiveRowAppearance.Reset();

对我和 Gianni 都没用。而且 Gianni 的方法会清除 ListObject 数据。你能提供任何帮助,为什么它可能不起作用吗?我使用了默认属性的简单网格进行绑定,然后执行了推荐的两行代码。但没有变化。 - Chad
这对我有用。对于那些有类似问题的人,请记住一行可以有两个属性:“Selected”和“Active”。零个或多个行可以被选择,但只有一个行是活动的。不幸的是,选择的行和活动的行(默认情况下)以相同的方式突出显示。活动行也通过行标题中的三角形指示(如果启用了行标题)。ActiveRowAppearance.Reset()调用告诉UltraGrid不要突出显示活动行。希望这可以帮助到你们。 - AlfredBr

5

试试这个:

this.ultraGrid1.SyncWithCurrencyManager = false;
this.ultraGrid1.DisplayLayout.Override.RowSelectors=DefaultableBoolean.False;

1
谢谢。这让我疯了。 - Keith

5
这帮助我抑制了网格的“活动外观”:
grid.DisplayLayout.Override.ActiveAppearancesEnabled = Infragistics.Win.DefaultableBoolean.False;

如果您不想将行标记为已选中,您需要对“选定外观”执行相同的操作:

grid.DisplayLayout.Override.SelectedAppearancesEnabled = Infragistics.Win.DefaultableBoolean.False;

4

我有与你完全相同的问题,但Gerrie Schenck的解决方案对我不起作用。我使用了这个技巧: MyUltraGrid.ActiveRow = MyUltraGrid.Rows[0]; MyUltraGrid.ActiveRow = null;


这将清除第0行的ListObject数据。 - Chad

3

重要的是要区分选定和活动状态。网格永远不会自动选择任何行,您看到的是ActiveRow,它显示为与选定行相同的高亮。

网格的ActiveRow与CurrencyManager同步,因此默认情况下,网格的第一行会出现高亮显示。重置ActiveRowAppearance和ActiveCellAppearance将从ActiveRow中删除默认的高亮显示。

        this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance.Reset();
        this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.Reset();

但需要注意的是,这并不能防止该行成为活动行,只是网格不再突出显示活动行。由于该行仍然是活动的(而且无法防止这种情况),任何其他突出显示活动行的内容仍将突出显示该行。例如,如果您将一个应用于ActiveRow的样式库(*.isl)文件加载到应用程序中,则仍将显示该样式。
如果您想更彻底地禁用活动行外观,完全忽略所有属性设置和样式库设置,可以这样做:
this.ultraGrid1.DisplayLayout.Override.ActiveAppearancesEnabled = Infragistics.Win.DefaultableBoolean.False;

请注意,此属性是在v9.2中添加的,在旧版本中不存在。

1

不知何故,上面列出的解决方案都对我无效。在我的情况下,我只是希望根本不进行激活/选择。因此,我采取了以下措施。这可能不是最好的解决方案,但它有效。

    private void LayoutVisulizerUltraGrid_AfterRowActivate(object sender, EventArgs e)
    {
        LayoutVisulizerUltraGrid.ActiveRow = null;
    }

0

禁用选定的行,然后将 ActiveRow 设置为 null 应该清除选择。

grid.DisplayLayout.Override.SelectTypeRow = Infragistics.Win.UltraWinGrid.SelectType.None;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接