Компонент XMLGrid

Компонент «TISPROGridXML» призначений для відображення даних в табличній формі з використанням XML - реєстру на користувальницької формі. В дизайнері вікон розміщений на вкладці Розширені.

Параметри компонента:

  1. XMLFileDescription – ім'я файлу XML -реестра:
  2. MdID - код модуля
  3. RstID - код реєстру
  4. QueryID - код запиту

Значення з імені файлу XML -реестра.

Наприклад: U055_1_001.xml - MdID = 55, RstID = 1, QueryID = 1

  • GridID - ідентифікатор реєстру.
  • XMLBaseDescription - опис таблиці:
    • BaseSynonym - Ім'я таблиці. Синонім для таблиці в реєстрі.
    • UniqueKeys - Список полів, що становлять унікальний ключ записи. Обов'язковий параметр для позиціонування на реєстрі.
    • MarkAbsField - Ім'я поля, значення якого буде використовуватися для оцінки записів. . Обов'язковий параметр для роботи із зазначеними записами.
    • Mrk - Код маркера реєстру (повинен бути більше 20 000).

Події:

  • OnClick - приходить при будь-якій зміні фокуса в реєстрі, тобто при зміні осередку, в т.ч. в межах одного рядка;
  • OnShowRecord - викликається при відображенні запису.
  • OnModFieldBegin - викликається на початку редагування поля.
  • OnModifyField - викликається після завершення редагування поля.
  • OnNewRecord - викликається при створенні нового запису в реєстрі.
  • OnInsertRecord - викликається при вставці запису до реєстру.
  • _ShowRecord - компонент "Таблиця" видає це повідомлення перед завантаженням записи у внутрішній буфер. Оброблювач цього повідомлення повинен заповнити всі обчислюваності поля, що входять до запису таблиці. Тобто сформувати запис, який потім буде відображатися.
  • _BeforeRecord - це повідомлення надсилається при позиціонуванні на запис, після того, як поточна запис на базі встановлена. Оброблювач цієї події повинен обробляти зв'язку таблиці з іншими елементами форми: оновлювати праву частину комбореестра, оновлювати поля підвалу, оновлювати пов'язані таблиці і т.п. Т.е. Тобто ця подія - сигнал навігації по таблиці.

Функції:

Функції ініціалізації і інтерфейсу:

  • function Init: integer

Ініціалізація роботи з реєстром.

Функція ініціалізує механізм і викликає побудову / заповнення реєстру згідно з видом, зазначеним в параметрах.

Перед викликом обов'язково повинні бути заповнені параметри: GridID, MdID, RstID, QueryID.

  • function Refresh: integer

Оновлює дані в реєстрі. Оновлення здійснюється з повторним запитом параметрів у користувача.

  • function RefreshNoAsk: integer

Оновлює дані в реєстрі. Оновлення здійснюється з попередніми значеннями параметрів.

  • function RefreshNoClear: integer

Оновлює дані в реєстрі без очищення реєстру. Можна застосовувати, наприклад, для оновлення не лише реєстру, а однієї або декількох записів, попередньо їх видаливши.

  • function SelectView: integer

Виводить вікно вибору / встановлення виду реєстру. (Відповідає натисканню комбінації клавіш Alt+0)

  • function RefreshRst: integer

Оновлює дані в реєстрі. Оновлення здійснюється з повторним запитом параметрів і очищенням маркерів (відповідає натисканню комбінації клавішCtrl + F2)

  • function ShowFindWindow: integer

Показує вікно пошуку. Відповідає натисканню клавіші F7.

  • function ShowFilterWindow: integer

Показує вікно фільтра. Відповідає натисканню клавіші F11.

  • function ShowFilterWindowCurrent: integer

Показує вікно фільтра з заповненням значення за поточним полем. Відповідає натисканню комбінації клавіш Alt + F11.

Функції роботи з таблицею реєстру:

  • function SetBegin: integer

Встановити курсор на перший запис

  • function GetNext: integer

Встановити курсор на наступний запис

  • function SetEnd: integer

Встановити курсор на останній запис

  • function GetPrev: integer
  • Встановити курсор на попередній запис
  • function GetKey: integer

Встановити курсор на запис у відповідності зі значенням ключа UniqueKeys.

  • function Delete: integer

Видаляє поточний запис в реєстрі

  • procedure BeginUpdateprocedure BeginUpdate

Включає режим редагування реєстру, при якому дії з функціями роботи з реєстром не відображаються на екрані.

  • procedure EndUpdate

Відключає режим редагування реєстру

  • function ShowTable: integer

Переотображает реєстр.

Функції роботи з полями:

  • function ParamField (FieldName: String, FieldType: String, FieldLen: Byte, FieldScale: Byte, Value: String):integer

Заповнює поле-параметр XML -реестра.

  • FldName - ім'я поля. Повинна відповідати імені в розділі <params>.
  • FldType - тип поля . Допустимі типи: "STRING", "INT", "NUM", "DATE", "TIME".
  • FldLen - довжина поля для типу STRING.
  • FldScale - місце точки для типу NUM.
  • Value - значення параметра.
  • function GetFieldValue (FieldName: String): String

Отримати значення поля по імені

  • function SetFieldValue (FieldName: String, Value: String): integer

Встановити значення поля по імені. Використовується для заповнення полів ключа. Поля записів в таблиці не змінює.

  • function SetFieldModifiable (FieldName: String, Modifiable: boolean): Boolean

Встанавливаются можливість редагування зазначеного поля в реєстрі. Працює тільки при ReadOnly = false.

functionfunction Set Sort (FieldNames: String): integer

Встановити сортування по імені полів. FieldNames заповнюється наступним шаблоном: ім'я поля, напрямок сортування, ..., ім'я поля, напрямок сортування . Напрямок сортування може бути або по зростанню: 'A', або по спадаючій: 'D'

AllowSort (Allow: BOOLEAN): integer

Дозволити / заборонити зміну сортування.

Гарячі клавіші.

F7 - Пошук

F11 - Фільтр

Alt+F11 - Фільтр за поточним

F12 - Налаштування сортування

Властивості:

ReadOnly - Ознака реєстру «тільки для читання». Для редагування записів прямо в реєстрі встановити в false.

Insertable - Ознака можливості вставки. При установці в true при русі курсору нижче останнього запису створюється нова.

CaptionLines-властивість визначає кількість рівнів в шапці таблиці. Заповнюється шапка як і раніше в XML-файл у властивості name тега <field>. Приклад: name = "Загальна шапка | Поле ”. Рівні шапки поділяються символом «| ». Однакову назву декількох колонок об'єднує їх в одну.

FixedCols - Це властивість вказує кількість зафіксованих колонок з лівого краю таблиці.

Приклад:

// Робимо реєстр, що редагується

GridXML 1. Refresh;

GridXML1.ReadOnly: = false;

GridXML1.Insertable: = true;

GridXML1.SetFieldModifiable ( 'PtnCd', true);// Поле контрагента - редагується

procedure GridXML1OnModifyField (Sender: TISPROComponent);

var

PtnCd, PtnNm: String;

begin

PtnCd: = GridXML1.SetFieldValue ( 'PtnCd'); // Отримали новий код контрагента

//.....Отримали по ньому найменування, наприклад окремим запитом

GridXML 1. SetFieldValue (PtnNm); // Записали в реєстр найменування

end;

код програми:

procedure Form1OnShow (Sender: TISPROC omponent);

var

ret: integer;

begin

// Запуск

GridXML1.XMLFileDescription.MdID: = 555;

GridXML1.XMLFileDescription.RstID: = 0;

GridXML1.XMLFileDescription.QueryID: = 1;

GridXML1.XMLBaseDescription.MarkAbsField: = 'Tes tRcd';

GridXML1.XMLBaseDescription.Mrk: = 20000;

GridXML1.XMLBaseDescription.UniqueKeys: = 'TestRcd';

ret: = GridXML1.Init;

if (ret> 0) then

begin

// Параметрв 0

ret: = GridXML1.ParamField ( 'TestID', 'INT', 0, 0, '0');

if (ret> 0) then

GridXML1.Refresh;

end

end;

// Кнопка "наступний запис"

procedure But ton1OnClick (Sender: TISPROComponent);

begin

GridXML1.GetNext;

end;

// Кнопка "попереднійзапис "

procedure Button2OnClick (Sender: TISPROComponent);

begin

GridXML1.GetPrev;

end;

procedure GridXML1OnDblClick (Sender: TISPROComponent);

var

Rcd, ret: integer;

begin

// Отримуємо Ід поточного запису

Rcd: = StrToInt (GridXML1.GetFieldValue ( 'TestRcd'));

// Щось робимо із записом

// .....

// ODBCQuery 1.Open;

// .....

// Оновлюємо запис з сервера

ret: = GridXML1.ParamField ( 'TestID', 'INT', 0, 0, IntToStr (Rcd));//Ид нужной записи // Ід потрібного запису

if (ret> 0) then

Begin

GridXML1.BeginUpdate;

GridXML1.Delete;// Видаляємо

Gri dXML1.RefreshNoClear;// оновлюємо один запис

GridXML1.EndUpdate;

GridXML1.ParamField ( 'TestID', 'INT', 0, 0, '0');// Обнуляем // Обнуляємопараметр параметр

GridXML1.SetFieldValue ( 'TestRcd', IntToStr (Rcd));// позиціонуємо на оновленому запису

GridXML1.GetKey;

End;

end;

procedure GridXML1OnKeyDown (Sender: TISPROComponent; var Key: Word; Shift: Integer);

begin

if (Key = 13) then // При натисканні Enter дані поточного запису:

ShowMessage ( 'Номер документа:' + GridXML 1. GetFieldValue ( 'TestNmr') + 'Сума:' + GridXML 1. GetFieldValue ( 'TestSm'));

end; begin

end.

ВикористовуванийXML-реєстр:

U555_0_001.xml

<? xml v ersion = "1.0" encoding = "windows-1251"?>

< Query name = "Документи призначені для користувача">

<Result - fields>

<field name = "Rcd" as = "TestRcd" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "0" type = "int" prgres = " "p rgtype =" 2 ">

<program> CashDoc_Rcd </ program> </ field>

<field name = "Номер" as = "TestNmr" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<program> CashDoc_DocNmr </ pr ogram> </ field>

<field name = "Дата" as = "TestDat" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<program> CashDocR.CashDoc_DocDat </ program> </ field>

<field name = "Контрагент" as = "TestPtn" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<program> CashDoc_Ptn </ program> </ field>

<field name = " Сума " as = "TestSm" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<Program> Round (CashDoc_Sm, Svl_Acc) </ program> </ field>

</ Result-fields>

<Tables>

FROM CashDocR

LEFT JOIN Svl on SVl_Rcd = CashDoc_Val

</ Tables>

<Where>

(CashDoc_Rcd =: TestID OR: TestID = 0)

</ Where>

<Params>

<param name = "ID документа " id = "TestID" type = "int" />

</ Params>

</ Query>