• Главная
  • О нас
  • Статьи
  • Вакансии
  • Контакты

Разработка кроссплатформенных мобильных приложений в Delphi #5

23 Ноябрь 2013 by Juds in Delphi, How-To tags: Delphi, FireDAC, FireMonkey

d9e0c11ab1eb1db83066b20c71e17d00

Часть #1
Часть #2
Часть #3
Часть #4

В предыдущей части цикла мы более детально познакомились с принципами работы механизма связывания объектов LiveBinding на основе выражений. Благодаря возможностям подсистемы Visual LiveBinding разработчик избавлен от необходимости программировать эти выражения вручную. Сегодня мы продолжим разработку нашего приложения и познакомимся с новыми приемами работы с базами данных в FireMonkey с использованием FireDAC и LiveBinding.

В модуле данных (DataModule) создадим еще один набор данных с помощью компонента TFDTable. Свяжем его с таблицей tblIngredientes. Назовем его FDTIngredientes. По аналогии с предыдущими наборами данных, создадим список полей. Внесем изменения в процедуру ConnectToDB.

1
2
3
4
5
6
7
8
9
10
11
12
13
<span style="color: #000000; font-weight: bold;">function</span> TDM<span style="color: #000066;">.</span><span style="color: #006600;">ConnectToDB</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Boolean</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">begin</span>
  <span style="color: #000000; font-weight: bold;">try</span>
    FDConnection1<span style="color: #000066;">.</span><span style="color: #006600;">Connected</span> <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">True</span><span style="color: #000066;">;</span> <span style="color: #808080; font-style: italic;">// Устанавливаем соединение</span>
    FDTRecipe<span style="color: #000066;">.</span><span style="color: #006600;">Open</span><span style="color: #000066;">;</span> <span style="color: #808080; font-style: italic;">// Открываем таблицу рецептов</span>
    FDTUnits<span style="color: #000066;">.</span><span style="color: #006600;">Open</span><span style="color: #000066;">;</span> <span style="color: #808080; font-style: italic;">// Открываем единиц измерения</span>
    FDTFoodstuff<span style="color: #000066;">.</span><span style="color: #006600;">Open</span><span style="color: #000066;">;</span> <span style="color: #808080; font-style: italic;">// Открываем продуктов</span>
    FDTIngredientes<span style="color: #000066;">.</span><span style="color: #006600;">Open</span><span style="color: #000066;">;</span> <span style="color: #808080; font-style: italic;">// Открываем ингредиентов</span>
  <span style="color: #000000; font-weight: bold;">except</span>
<span style="color: #808080; font-style: italic;">// Обработчик исключений....</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
  Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> FDConnection1<span style="color: #000066;">.</span><span style="color: #006600;">Connected</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>

По логике работы приложения, нам необходимо сделать так, что бы при перемещении по списку рецептов на главной форме обновлялся список ингредиентов. Для каждого рецепта должен отображаться свой список ингредиентов на вкладке «Ингредиенты». Реализовать такую функциональность проще всего с помощью механизм Master-Details на уровне связей компонентов.

Прежде всего, необходимо задать свойство MasterSource для подчиненного набора данных (FDTIngredientes). Для связи нам придется использовать компонент TDataSource. «Привяжем» его к компоненту FDTRecipe, отвечающему за вывод данных из таблицы tblRecipe, и назовем его dsRecipe. Свойству MasterSource компонента FDTIngredientes установим (выберем из выпадающего списка) значение dsRecipe. С помощью редактора свойств установим значение свойства MasterField – Id. И, наконец, выберем из списка индексов значение свойства IndexName – idxRecipe. Данных индекс индексирует таблицу tblIngredientes по полю IdCB, отвечающему за связь с таблицей рецептов.

535f99ca66ad0c33ee03c965b8a676eb

По сути, на уровне компонентов доступа к данным, все работает так же, как и в VCL.

На главной форме приложения перейдем на закладку «Ингредиенты» и вызовем LiveBindings Designer. Поместим на вкладкеTGrid и TBindNavigator, и «привяжем» эти компоненты к FDTIngredientes, так, как мы это делали в прошлой части за счет «перетаскивания» или «рисования связей» на визуальной диаграмме. Теперь, если вы запустите приложение, то, вероятно, логика отображения ингредиентов на данном этапе покажется вам маловразумительной. Действительно, в grid’е отображаются не названия продуктов, и единиц измерения, а их коды (Id).

Теперь нам необходимо корректно отобразить значения названий продуктов и единиц измерения в рецепте. Для этого используем т.н. «lookup»- поля («просмотровые» поля). Вызовем список полей компонента FDTIngredientes и создадим новое поле (в контекстном меню выберем пункт New Field…). Заполним данные в редакторе полей так, как это показано на рисунке:

28e80454f24f34cc5880a903bed99148

В поле Product будет отображаться название продукта, из таблицы Foodstuff, Id которого будет соответствовать значению поля IdFs в таблице FDTIngredientes. Обратите внимание на значение Field type.

Аналогичным образом создадим Lookup для отображения данных из таблицы Units (единицы измерения).

a8b51b5bca284cba1a1c85af657373af

Теперь, нам необходимо, во-первых, корректно отобразить значения Lookup полей в компоненте «сетка» (grid), а так же создать механизм ввода данных.

Вернемся на главную форму и разместим на ней два компонента TComboBox (назовем их cbProd и cbUnit) и один TEdit, как это показано на рисунке.

60693da1e85584fbce9d07bf4a018d16

В LiveBindings Designer свяжем свойства этих компонентов с источниками данных, так как это показано на рисунке:

0ffbfa45d2b03031d1bc7f6641998c9c

Правила подключения компонента TComboBox к источнику данных достаточно просты. Item.Text связывается с полем, значения которого появляются в выпадающем списке. Item.LookupData связывается с полем, значение которого подставляется в редактируемый набор данных. Соотвественно, SelectedValue связывается с редактируемым полем редактируемого набора данных.

Теперь настроим Grid. Двойным нажатием мышки на компоненте BindingsList1 (имя компоненту было присвоено автоматически, вы его можете изменить) откроем редактор связей и выберем компонентTLinkGridToDataSourceBindSourceDB. В Object Inspector вызовем редактор свойства Columns. Создадим все поля (кнопка Add All Fields) и настроим для каждого из них отображаемый заголовок и видимость (свойство Visible) по аналогии с тем, как мы это делали в предыдущей части.

Запустим приложение. При перемещении по списку рецептов, на вкладке «Ингредиенты» обновляется список продуктов, что свидетельствует о том, что связь Master-Details работает правильно. Значение названия продукта и единицы измерения в рецепте мы можем задать с помощью выпадающего списка (ComboBox). Выбранные значения корректно отображаются в grid’е.

beabea74eb83f12d01bcc7863aebfdaf

В следующей части мы переведем только что реализованный функционал на мобильную платформу.

До пятницы!

Источник: habrahabr.ru

Разработка кроссплатформенных мобильных приложений в Delphi #4
Дайджест интересных новостей и материалов из мира PHP (10—24 ноября 2013)

Leave a Comment! Отменить ответ

You must be logged in to post a comment.
Уроки
  • Cinema 4D
  • Unity3D
  • PHP
  • Delphi
  • JavaScript
  • Python
  • HTML5
  • Go
Статьи
  • Новости
  • Game Development
  • PHP
  • QA
  • IT Юмор
  • Разное
Теги
Android Composer Delphi excerption experience Game Design game development gameplay Git Go! AOP google Google Analytics HHVM it experience it юмор Laravel Linux manager Phalcon PHP Python QA RFC Selenium Silex Slim Symfony 2 unity3d warcraft Yii Yii 2 Zend Framework 2 Zephir Биографии Новости Обучение веб-разработка высоконагруженные проекты дайджест дизайн исследование подборка ссылки стартап тенденции
О Нас

Juds–компания по разработке программного обеспечения, разработке веб-проектов и мобильных приложений. Все предлагаемые нами решения индивидуальны и направлены на максимально точное удовлетворение потребностей наших партнеров. Мы находимся в постоянном поиске новых ярких решений. Главные критерии – актуальность применения и инновационность.

Статьи
  • Лучшее из мира PHP за 2013
  • Полезные функции Google Analytics
  • Что в SEO можно считать нормальным и работающим, а что – отжившим
  • 30 полезных для себя вещей
  • Дайджест интересных новостей и материалов из мира PHP (20 октября — 10 ноября 2013)
  • Cinema 4D: создаем плагин – объект
IT Юмор
Метки
Android Composer experience Game Design game development google HHVM it experience it юмор Laravel manager PHP unity3d Yii Zend Framework 2 Zephir Новости Обучение веб-разработка дайджест исследование подборка ссылки стартап тенденции
© 2014 Juds. Все права защищены.