Компонент XMLGrid
Компонент «TISPROGrid XML» призначений для відображення даних в табличній формі з використанням XML - реєстру на користувальницької формі. В дизайнері вікон розміщений на вкладці Розширені.
Параметри компонента:
- XMLFileDescription – ім'я файлу XML -реестра:
- MdID - код модуля;
- RstID - код реєстру;
- 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 BeginUpdate procedure 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 - значення параметра.
- Заповнює поле-параметр XML - реєстра.
- 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>