Учебник по Showcase: Действие при нажатии на грид

Материал из Course Orchestra
Перейти к: навигация, поиск

Внимание! Изложенная здесь информация устарела! В качестве учебника следует использовать https://share.curs.ru/webhelp/ (work in progress).


В предыдущем примере мы просто выводили на экран грид. Однако, чаще всего грид должен обладать некой интерактивностью. Например, при щелчке на запись в гриде, перерисовывать другие элементы. Данное свойство можно реализовать при помощи столбца [~~properties].

Для начала на панель добавим новый элемент грида:

<?xml version="1.0" encoding="UTF-8"?>
<datapanel>
   <tab id="1" name="Сотрудники и оргструктура">	
      <element id="30" type="grid" proc="orgGrid"/>
      <element id="130" type="grid" proc="employeesGrid" hideOnLoad="true"/>
   </tab>	
</datapanel>

Обратите внимание, что у нового элемента указано свойство hideOnLoad="true". Это значит, что при открытии панели данный элемент не будет перерисован.

Процедура второго грида похожа на случай, рассмотренный в предыдущем примере, но здесь уже прописано большее количество отображаемых столбцов. Для наглядности добавлен столбец "Время перерисовки грида", чтобы мы могли отслеживать момент перерисовки и отображать его на экране.

ALTER PROCEDURE [dbo].[employeesGrid]
   @main_context varchar(512)='',
   @add_context varchar(512)='',
   @filterinfo xml='',
   @session_context xml ='',
   @element_id varchar(512) ='',
   @sortcols varchar(1024) ='',
   @gridsettings xml ='' output,
   @error_mes varchar(MAX)='' output
AS
BEGIN
SET NOCOUNT ON;

   SELECT 
      getdate() as "Время перерисовки грида"
      ,e.fio as "ФИО"
      ,p."name" as "Должность"
      ,e."date" as "Дата приема"
      ,case e."status" 
         when 0 then 'Не женат/ не замужем'	
         when 1 then 'Женат/ замужем'	
       end as "Статус"
      ,e."comment" as "Комментарий"		
      FROM "employees" as "e"
         left join "posts" as "p" 
            on "p".uid = e."postId"

   SET @gridsettings='
      <gridsettings>
         <columns>
            <col id="ФИО" width="200"/>
            <col id="Должность" width="150px"/>
         </columns>
         <properties flip="false" pagesize="15" profile="gr_withoutExcel.properties"/>
      </gridsettings>'

END

А процедура orgGrid выглядит следующим образом:

ALTER PROCEDURE [dbo].[orgGrid]
   @main_context nvarchar(512)='' ,  
   @add_context nvarchar(512)='' ,  
   @filterinfo xml='',  
   @session_context xml='',
   @sortcols nvarchar(1024)='', 
   @element_id nvarchar(512)='',
   @gridsettings xml='' output,      
   @error_mes nvarchar(max) = '' output
AS
BEGIN
   SET NOCOUNT ON;
   
   SELECT
      o."name" as "Наименование"
      ,'<properties>
           <event name="row_single_click">
              <action>
                 <main_context>current</main_context>
                 <datapanel type="current" tab="current">
                    <element id="130"/>
                 </datapanel>
              </action>
           </event>                                     
        </properties>' as "~~properties" 
   FROM "orgStructure" o

   SET @gridsettings='
      <gridsettings>
         <columns>
            <col id="Наименование" width="325px"/>
         </columns>
         <properties pagesize="10" profile="gr_withoutExcel.properties"/>
      </gridsettings>';
   
END

Здесь обратите внимание на следующие моменты:

  • Появился новый столбец [~~properties]. Это необязательный служебный столбец, который не отображается на экране. В нем описываются действия, которые происходят при различных событиях грида:
    • row_single_click (одинарный клик на строку);
    • row_double_click (двойной клик на строку);
    • cell_single_click (одинарный клик на строку);
    • cell_double_click (двойной клик на строку);
    • row_selection (выбор строки в селекторе справа).

В нашем случае действие заключается в следующем: на текущей панели и текущей вкладке (<datapanel type="current" tab="current">), перерисовать элемент с id = 130 (<element id="130"/>), у которого main_context остается текущем (<main_context>current</main_context>), т.е. у процедуры employeesGrid параметр @main_context останется таким же, как и в родительском элементе orgGrid. add_context в элемент не передается.

  • В @gridsettings мы убрали атрибут autoSelectRecordId, т.к. если мы его оставим, то строка автоматически выделится, сработает действие в гриде, элемент с id=130 перерисуется (т.е. несмотря на свойство hideOnLoad, он загрузится).

И теперь при нажатии на строку верхнего грида нижний грид будет перерисовываться. Это будет заметно по изменяющемуся значению столбца "Время перерисовки грида".

Самостоятельная работа: Исправьте процедуру orgGrid так, чтобы при двойном клике на строку верхнего грида перерисовывался нижний грид.