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 (удаление пустых строк).