| [Delphi] Работа с DBGrid |
| Author: Blacksilver |
| 20.09.2009 21:43 |
[Delphi] Работа с DBGridВ статье будут описаны простые приёмы работы с DBGrid, которых достаточно для большинства случаев работы с базами данных в Delphi. Как с ним работать вообщеДля тех, кто может работать с DBGrid, эта часть бесполезна. Теперь остальные. Для начала нам нужен компонент DataSource (вкладка Data Access). DataSource только предоставляет данные в удобном для других компонент виде, вытягивать их из базы данных (или ещё откуда) должен другой компонент. Он указывается в поле DataSet нашего DataSource. Создаем DBGrid. У него в поле DataSource вешаем угадайте что и добавляем столбцы. Для каждого столбца нам важны поля FieldName (имя поля) и Title/Caption (текст заголовка). И всё... Теперь пользователь может менять данные в таблице и изменения будут автоматически сохраняться в БД. Combobox в DBGridСудя по многочисленным предлагаемым вариантам в интернете, мало кто знает, что DBGrid и без всяких надстроек поддерживает механизм combobox'ов. Только от спрятан. Тут два способа добавить combobox в DBGrid. Combobox с фиксированым списком вариантовВ столбце находим поле PickList и вбиваем туда варианты. И всё. Обратите внимание, что в БД сохраняется текст выбраной стоки, поэтому и поле должно быть текстовым. В примере это поле "Состояние". Combobox с подгрузкой списка вариантов из БДЧтобы добавить такой combobox в DBGrid нужно... не трогать его. Вместо этого мы ищем в дереве объектов объект Fields, принадлежащий нашему источнику данных. Тыкаем в него правой кнопкой и выбираем сначала "Add all fields", а затем "New field".
В окошке заполняем: Маска ввода данныхТакже данные можно фильтровать при помощи маски, которая задается в поле EditMask объекта, соответствующего нужному полю. Там есть несколько готовых масок для даты, времени и всего такого. В примере это используется для поля "Дата смерти".
Изменение данныхДобавление записиЗапись можно добавить вот такой строкой: DBGrid1.DataSource.DataSet.Insert; DBGrid1.DataSource.DataSet - это ссылка на источник данных (у меня - на объект Bodies). В таком длинном виде стоит записывать на случай, если вдруг захочется изменить источник данных. Если захочется как-то обработать данные сразу после создания, то обработку стоит вешать на обработчик события OnNewRecord нашего источника данных, а не сразу после Insert. В противном случае пользователь может добавить запись, выбрав последнюю строку и нажав кнопку вниз - тогда ваш код не выполнится. Удаление записиТут всё просто. Единственное, на что стоит обратить внимание - есть ли вообще что удалять. if not DBGrid1.DataSource.DataSet.Eof then DBGrid1.DataSource.DataSet.Delete; Сохранение записиПоследнее, на что я советую вам обратить внимание - закрытие формы. Пользователь может добавить запись, все вписать и, довольный собой, закрыть форму. Поскольку на другую запись курсор он не переключал, DBGrid не знает, что можно уже сохранять изменения в БД, и запись не добавиться. Мелочь, но очень неприятно и намекает на криворукость программиста. Чтобы сохранить нашу криворукость в тайне, нужно на обработчик закрытия формы добавить такие строки: if DBGrid1.EditorMode or DBGrid1.DataSource.DataSet.Modified then DBGrid1.DataSource.DataSet.Post; Теперь программа будет при закрытии сохранять изменения, если это нужно. ЗаключениеВот тут лежит программа-пример. Хочу обратить ваше внимание, что я в ней написал всего 8 строк кода. Вот бы всё в нашей работе было так просто... |
| Обновлено 22.09.2009 17:50 |


Комментарии
Заранее благодарен.
RSS лента комментариев этой записи.