Блог

DragDrop. Декларативное описание

В системе реализовано декларативное описание переноса данных между объектами интерфейса (DragDrop).

На данный момент времени декларативное описание DragDrop возможно на следующих объектах интерфейса:

  • Browser
  • Schedule
  • Timeline

Если на Schedule описан DragDrop переноса элементов каледндаря между объектами формы, то перенос данных в другие объекты интерфейса осуществляется с нажатой клавишей CTRL.

 

На рисунке представлено описание DragDrop для формы браузера.

 

 

На данной форме можно сформировать список объектов определённых типов, от которых разрешено принятие данных для текущего объекта Базы Знаний.

Для каждого объекта в списке можно указать действие, которое будет выполнено после принятия данных.

 

Описание параметров формы:

Разрешить перенос данных от

Выполнить действие после переноса

Тип

Тип объекта, от которого разрешен перенос данных.

В случае указания любого объекта, данные будут приняты, если они удовлетворяют определённой структуре. Описание структуры будет представлено ниже.

Тип

Тип объекта, который будет вызван после приёма данных.

Объект

Указание объекта Базы Заний для выполнения после приёма данных.

Параметр

Указание параметра объекта, куда будет передан DataTable принимаемых данных. Можно использовать для вызова пользовательских форм.

Для каждой строки

Если указан данный параметр, то объект будет вызван столько раз, сколько строк в принимаемом массиве данных. В случае выполнения датаблока для обработки принимаемых данных, будет выполнена команда на добавление, если параметр False, в противном случае, команда на выборку.

Объект

Указание объекта Базы Заний.

Обновить

Признак обновления объекта Базы Заний после приёма данных.

 

 

 

Описание структуры принимаемых данных объектами интерфейса (Client.Common.Config.DragDropObject):

 

        ''' <summary>Структура данных для DragDrop</summary>

        Public Structure DragDropObject

 

            ''' <summary>Конструктор</summary>

            ''' <param name="ObjectType">Тип объекта операции DragDrop</param>

            ''' <param name="ObjectID">ID объекта операции DragDrop. Уникальный для экземпляра каждого объекта</param>

            ''' <param name="ObjectData">Данные объекта</param>

            Public Sub New(ObjectType As DragDropType, ObjectID As Guid, ObjectData As Object)

                Me.ObjectType = ObjectType

                Me.ObjectID = ObjectID

                Me.KBObjectType = Common.KBObjectType.None

                Me.KBObjectID = Guid.Empty

                Me.ObjectData = ObjectData

            End Sub

 

            ''' <summary>Конструктор</summary>

            ''' <param name="ObjectType">Тип объекта операции DragDrop</param>

            ''' <param name="ObjectID">ID объекта операции DragDrop. Уникальный для экземпляра каждого объекта</param>

            ''' <param name="KBObjectType">Тип объекта Базы Знаний</param>

            ''' <param name="KBObjectID">ID объекта Базы Знаний</param>

            ''' <param name="ObjectData">Данные объекта</param>

            ''' <param name="Table">Табличные данные</param>

            Public Sub New(ObjectType As DragDropType, ObjectID As Guid, KBObjectType As KBObjectType, KBObjectID As Guid, ObjectData As Object, Table As DataTable)

                Me.ObjectType = ObjectType

                Me.ObjectID = ObjectID

                Me.KBObjectType = KBObjectType

                Me.KBObjectID = KBObjectID

                Me.ObjectData = ObjectData

                Me.Table = Table

            End Sub

 

            ''' <summary>Тип объекта</summary>

            Public ObjectType As DragDropType

            ''' <summary>ID объекта</summary>

            Public ObjectID As Guid

            ''' <summary>Тип объекта Базы Знаний</summary>

            Public KBObjectType As KBObjectType

            ''' <summary>ID объекта Базы Знаний</summary>

            Public KBObjectID As Guid

            ''' <summary>Данные объекта</summary>

            Public ObjectData As Object

            ''' <summary>Табличные данные</summary>

            Public Table As DataTable

 

        End Structure

 

Данную структуру можно сформировать на любой пользовательской форме или в своей библиотеке.

 

Для принятия данных контролом, в его свойствах нужно выставить: {имя_контрола}.AllowDrop = True.

 

Пример обработки структуры в контроле на примере Диаграммы Ганта:

 

 ''' <summary>Перемещение по контролу при операции DragDrop</summary>

        Private Sub jTimeLine_DragOver(sender As Object, e As DragEventArgs) Handles jTimeLine.DragOver

            If jTimeLine.AllowDrop AndAlso e.Data.GetDataPresent(GetType(Config.DragDropObject)) Then

                ' принимаем только структуру Config.DragDropObject

                Dim DragDropData As Config.DragDropObject = e.Data.GetData(GetType(Config.DragDropObject))

                If Me.IDTimeLine.Equals(DragDropData.KBObjectID) Then

                    ' обработка переноса данных над тем же объектом, откуда данные пришли

                    If Me.IDInstance.Equals(DragDropData.ObjectID) Then

                        e.Effect = Windows.Forms.DragDropEffects.All

                    Else

                        e.Effect = Windows.Forms.DragDropEffects.None

                    End If

                Else

                    ' принимаем данные только если тип "Объект Базы Знаний"

                    If DragDropData.ObjectType = DragDropType.KBObject Then

                        e.Effect = Windows.Forms.DragDropEffects.All

                    Else

                        e.Effect = Windows.Forms.DragDropEffects.None

                    End If

                End If

            Else

                e.Effect = Windows.Forms.DragDropEffects.None

            End If

        End Sub

 

В данном примере:

  • IDTimeLine - ID Диаграммы Ганта
  • IDInstance - ID экземпляра объекта (т.е. одна и та же Диаграмма Ганта открыта с разными параметрами, получаем 2 формы одного и того же объекта Базы Знаний)

 

 ''' <summary>Завершение перемещения по TimeLine при операции DragDrop</summary>

        Private Sub jTimeLine_DragDrop(sender As Object, e As DragEventArgs) Handles jTimeLine.DragDrop

     ' принимаем только структуру Config.DragDropObject

     If e.Data.GetDataPresent(GetType(Config.DragDropObject)) = False Then Return

            Dim DragDropData As Config.DragDropObject = e.Data.GetData(GetType(Config.DragDropObject))

    ' если записи в таблице отсутсвуют, выходим

            If DragDropData.Table.Rows.Count = 0 Then Return False

    ' далее следует код для обработки принимаемых данных

    ' {User Code}

        End Sub


Примеры реализации
Подписаться

Новые статьи

Изменения в разработке пользовательских форм Платформа как инструмент реализации задач индивидуального пользователя Поиск по связанным сущностям Дополнительные настройки Browser'а Новая форма интерфейса - FinderBrowser Новый вид меню пользователя Возможность формирования отчетов с использованием различных источников данных (Федерация данных) Росагролизинг внедрил лизинговый конвейер, автоматизировав процесс рассмотрения заявок на поставку сельхозтехники Возможность аутентификации и авторизации с использованием ADFS Создание значка уведомления (NotifyArea)