我在 WinForms 用户控件上放置了一个 UltraGrid。我调整了一些设置,以便可以将网格用作只读多行选择表。但是有一个问题:默认情况下,第一行似乎被选中。
但是Selected.Rows
属性是空的,ActiveRow
属性也是null
。
因此,该行似乎已被选中,但实际上并未选中,因此无法删除选择。
我确定必须在 UltraGrid 的某处隐藏一个设置来控制此行为。如果不是这种情况,那么也许有一种解决方法?
谢谢。
我在 WinForms 用户控件上放置了一个 UltraGrid。我调整了一些设置,以便可以将网格用作只读多行选择表。但是有一个问题:默认情况下,第一行似乎被选中。
但是Selected.Rows
属性是空的,ActiveRow
属性也是null
。
因此,该行似乎已被选中,但实际上并未选中,因此无法删除选择。
我确定必须在 UltraGrid 的某处隐藏一个设置来控制此行为。如果不是这种情况,那么也许有一种解决方法?
谢谢。
经过一番研究,我找到了一个解决方案,我将与大家分享:
myUltraGrid.DisplayLayout.Override.ActiveCellAppearance.Reset();
myUltraGrid.DisplayLayout.Override.ActiveRowAppearance.Reset();
试试这个:
this.ultraGrid1.SyncWithCurrencyManager = false;
this.ultraGrid1.DisplayLayout.Override.RowSelectors=DefaultableBoolean.False;
我遇到了与您完全相同的问题,但 Gerrie Schenck 的解决方案对我不起作用。我使用了这个技巧: MyUltraGrid.ActiveRow = MyUltraGrid.Rows[0]; MyUltraGrid.ActiveRow = null;
这帮助我抑制了网格的“活动外观”:
grid.DisplayLayout.Override.ActiveAppearancesEnabled = Infragistics.Win.DefaultableBoolean.False;
如果您也不希望将一行标记为选中,则必须对“Selected Appearance”执行相同操作:
grid.DisplayLayout.Override.SelectedAppearancesEnabled = Infragistics.Win.DefaultableBoolean.False;
区分 Selected 和 Active 很重要。网格永远不会自动选择任何行 您所看到的是 ActiveRow,它与所选行一样以突出显示方式显示。
网格的 ActiveRow 与 CurrencyManager 同步,因此默认情况下,网格的第一行突出显示。重置 ActiveRowAppearance 和 ActiveCellAppearance 将从 ActiveRow 中删除默认突出显示。
this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance.Reset();
this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.Reset();
但重要的是要注意,这不会阻止该行成为活动行,只是网格不再突出显示活动行。由于该行仍然处于活动状态(并且没有办法阻止这种情况),因此突出显示活动行的任何其他内容仍将突出显示该行。例如,如果您将样式库 (*.isl) 文件加载到将样式应用于 ActiveRow 的应用程序中,它仍将显示。
如果您想以更彻底的方式禁用活动行外观,完全忽略所有属性设置和样式库设置,您可以这样做:
this.ultraGrid1.DisplayLayout.Override.ActiveAppearancesEnabled = Infragistics.Win.DefaultableBoolean.False;
请注意,此属性是在 v9.2 中添加的,在旧版本中不存在。
不知何故,上面列出的解决方案都不适合我。就我而言,我只是希望根本不发生激活/选择。所以我做了以下。它可能不是最好的解决方案,但它确实有效。
private void LayoutVisulizerUltraGrid_AfterRowActivate(object sender, EventArgs e)
{
LayoutVisulizerUltraGrid.ActiveRow = null;
}
完全禁用选定的行,然后设置ActiveRow
为 null 应该清除选择。
grid.DisplayLayout.Override.SelectTypeRow = Infragistics.Win.UltraWinGrid.SelectType.None;