GroupEdit
- Winforms-контрол для создания и редактирования детейлов.
Свойства GroupEdit
Свойство | Описание |
---|---|
AdvansedMarks |
Добавление дополнительных кнопок управления выделением строк и меток на панель управления GroupEdit. |
AllowRowLocking |
Поддержка режима редактирования с блокировками. |
AlternativeColor |
Альтернативный цвет для раскраски строк. |
BackOnShiftEnter |
Переход на следующую ячейку по нажатию Shift + Enter при выключенном режиме EditOnEnter . |
DoNotAutoLoadItems |
Не загружать данные из базы автоматически. |
EnableValueDisplayResponsibility |
Поддержка режима ValueDisplayResponsibility . |
EditOnEnter |
Редактирование содержимого ячейки по нажатию на клавишу Enter |
GenerateValueChangedEventOnRowOperations |
Генерировать события изменения при добавлении или удалении строки. |
KeepFocus |
По умолчанию “false”. Если установлено “true”, то при сохранении будет установлен фокус на той же строке, где он был до сохранения. Запоминается не номер строки, а идентификатор выделенного объекта. |
LeaveOnLastEnter |
Переходить к следующему контролу при нажатии на клавишу Enter в последней строке. |
MoveNextOnEnter |
Переходить к следующей ячейке по клавише Enter при включенном режиме EditOnEnter . |
NewRowOnInsert |
Переходить на первую ячейку новой строки при нажатии Enter . |
NextOnEnter |
Перемещать активную ячейку по клавише Enter при выключенном режиме EditOnEnter . |
ReadOnly |
Режим “только чтение”. |
SortOrder |
Настройка сортировки столбца: Asc (по возрастанию), Desc (по убыванию), None (без сортировки). |
SortPriority |
Настройка приоритета сортировки столбца. |
ShowStatusBar |
Отображение полосы состояния, на которой показывается количество элементов. |
UseAlernativeColoring |
Использовать чередующуюся окраску строк (базовый/альтернативный цвет). |
Изменение значения в контроле
Для того чтобы выполнить настройку контрола, встраемового в ячейку GroupEdit
, нужно использовать событие gr_SetupEditorEventHandler
, обработчик которого автоматически генерируется на формах редактирования. В аргументы данного события передаются объект данных, контрол и имя редактируемого в данный момент свойства.
Пример:
protected override void gr_SetupEditorEventHandler(object sender, ICSSoft.STORMNET.Windows.Forms.SetupEditorEventArgs e)
{
// *** Start programmer edit section *** (gr_SetupEditorEventHandler( object sender, ICSSoft.STORMNET.Windows.Forms.SetupEditorEventArgs e ))
// *** End programmer edit section *** (gr_SetupEditorEventHandler( object sender, ICSSoft.STORMNET.Windows.Forms.SetupEditorEventArgs e ))
base.gr_SetupEditorEventHandler(sender, e);
// *** Start programmer edit section *** (gr_SetupEditorEventHandler( object sender, ICSSoft.STORMNET.Windows.Forms.SetupEditorEventArgs e ) End)
DateTimePicker dateTimePicker = e.control as DateTimePicker;
ICSSoft.STORMNET.DataObject dataObject = e.dataObject;
string propertyName = e.propertyName;
if (dateTimePicker != null && dataObject.GetStatus() == ObjectStatus.Created)
{
dateTimePicker.Value = DateTime.Now.AddMonths(1);
}
// *** End programmer edit section *** (gr_SetupEditorEventHandler( object sender, ICSSoft.STORMNET.Windows.Forms.SetupEditorEventArgs e ) End)
}
Отображение мастера в GroupEdit
При необходимости отображения в ячейке GroupEdit
«презентационного» атрибута мастера (т.е. некоторого выражения из атрибутов мастера) можно воспользоваться одним из описанных ниже решений.
- Переопределить метод
ToString()
у объекта данных. Особенность данного решения в том, что переопределение повлияет всюду, где используется методToString()
. - Реализовать у контрола, который связан со столбцом
GroupEdit
, интерфейсIValueDisplayResponsible
. Единственный методGetDisplayValue
данного интерфейса должен вернуть отображаемое в ячейке значение. УGroupEdit
установить свойствоEnableValueDisplayResponsibility
вtrue
.
#region IValueDisplayResponsible Members
public string GetDisplayValue(ICSSoft.STORMNET.DataObject dataObject)
{
if (curObject == null)
return string.Empty;
return string.Format(Формат,
Tools.IsNull(ICSSoft.STORMNET.Information.GetPropValueByName(curObject, Наименование), "").ToString(),
Tools.IsNull(ICSSoft.STORMNET.Information.GetPropValueByName(curObject, Код), "").ToString()).TrimStart();
}
#region IValueDisplayResponsible Members
Настройка ToolBar в GroupEdit
Особенностью настройки тулбара в GroupEdit
вляется то, что после указания необходимых операций в дизайнере, необходимо закрыть его и открыть снова - вертикальный размер при этом будет пересчитан.
Сортировка
Как и ObjectListView GroupEdit
позволяет отсортировать содержимое по различным столбцам. Чтобы быстро настроить многоуровневую сортировку, можно щелкать по столбцам левой кнопокой мыши, зажав клавишу Ctrl
.
Чтобы многоуровневая сортировка не сбросилась при случайном нажатии на столбец, добавлен уточняющий вопрос о смене сортировки.
Именованные настройки отображения столбцов
Существует возможность сохранения именованых настроек отображения столбцов по аналогии с ObjectListView
. Настройки сохраняются в базе данных отдельно для каждого пользователя.
UseSettings = true
в файле конфигурации.Прорисовка границ ячеек
Сделать рамки в GroupEdit
можно, используя следующий код:
C1FlexGrid ge = GetGridFromGE(Лапа);
ge.Styles.Normal.Border.Direction = BorderDirEnum.Both;
ge.Styles.Normal.Border.Style = BorderStyleEnum.Flat;
GroupEdit
с прорисованными границами будет выглядеть следующим образом:
EditManager
Обычно GroupEdit
располагается на форме редактирования, имеющей свой EditManager
. Однако, у GroupEdit'а
есть свой EditManager
, отвечающий за связывание и события.
К примеру, для того чтобы отловить событие возврата значения при выборе мастера, то необходимо подписаться на событие AfterChangeProperty
EditManager, относящегося к GroupEdit
, а не к странице редактирования:
GroupEdit1.EditManager.AfterChangeProperty += (o, s) =>
{
// Обработчики
};
AfterChangeProperty
при выборе мастера сработает дважды: 1ый раз при нажатии на кнопку лукапа, а 2ой раз при возврате значения.В GroupEdit
добавлена полоса состояния, отображающая количество элементов.
Чтобы включить отображение полосы состояния, необходимо установить свойство ShowStatusBar = true;
Обработка нажатий клавиш контролами
Интерфейс ISpecialKeysEditable
предназначен для передачи контролам редактирования нажатых клавиш, не являющихся алфавитно-цифровыми. Например, контрол при нажатии F3
поднимает список для выбора значения. Обработчик, определённый в контроле, срабатывает только, когда контрол находится в состоянии редактирования. Реализация контролом ISpecialKeysEditable
позволяет предать нажатые клавиши в контрол из GE. При нахождении фокуса на ячейке GE и нажатии указанных клавиш контрол перейдет в режим редактирования, и затем ему будут переданы нажатые клавиши.
Интерфейс содержит единственный метод List<Keys> GetSpecialEditKeys()
, который должен вернуть список обрабатываемых контролом сочетаний.
Пример реализации интерфейса представлен ниже. Обрабатываются сочетания F2+Shift+Ctrl
и F3
.
#region ISpecialKeysEditable Members
public List<Keys> GetSpecialEditKeys()
{
return new List<Keys> { Keys.F2 | Keys.Shift| Keys.Control , Keys.F3 };
}
#endregion
Полезные ссылки по GroupEdit
- Некоторые часто задаваемые вопросы освящены в статье FAQ по вводному обучению, а также в статье WinForms UI FAQ.
- Блокировка редактирования отдельных записей в
GroupEdit
. - Формат даты в GroupEdit
- Получение FlexGrid из GroupEdit.
- Обработка событий:
- Ограничение-тип-лукапа-combo-в-GroupEdit.
- Функциональность при работе с массивами детеиловых объектов DetailArray.
- Наложение ограничений на GroupEdit.
Расширения GroupEdit
Для GroupEdit
существует ряд расширений, например:
- GEEditorExt (редактирование детейлов в отдельном окне).
- GEEmptyDetailRemover (удаление пустых строк).