Ответ 1
После еще нескольких исследований я нашел решение, которое я поделюсь со всеми вами:
myUltraGrid.DisplayLayout.Override.ActiveCellAppearance.Reset();
myUltraGrid.DisplayLayout.Override.ActiveRowAppearance.Reset();
Я установил UltraGrid в пользовательский элемент управления WinForms. Я изменил некоторые настройки, поэтому я могу использовать сетку в качестве таблицы выбора нескольких строк только для чтения. Но есть одна проблема: по умолчанию выбирается первая строка.
Но свойство Selected.Rows
пусто, а также свойство ActiveRow
null
.
Итак, строка выбирается, но на самом деле это не так, что делает невозможным удаление выделения.
Я уверен, что для контроля этого поведения на UltraGrid должна быть скрытая настройка. И если это не так, возможно, есть обходное решение?
Спасибо.
После еще нескольких исследований я нашел решение, которое я поделюсь со всеми вами:
myUltraGrid.DisplayLayout.Override.ActiveCellAppearance.Reset();
myUltraGrid.DisplayLayout.Override.ActiveRowAppearance.Reset();
У меня точно такая же проблема, как у вас, но решение Gerrie Schenck для меня не работает. Я использовал этот трюк: MyUltraGrid.ActiveRow = MyUltraGrid.Rows [0]; MyUltraGrid.ActiveRow = null;
попробуйте следующее:
this.ultraGrid1.SyncWithCurrencyManager = false;
this.ultraGrid1.DisplayLayout.Override.RowSelectors=DefaultableBoolean.False;
Это помогло мне подавить "Active Appearance" сетки:
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;