MSFlexGrid1.Text=CStr(sum).
С другой стороны, при извлечении числа из текстового содержимого ячейки можно использовать функцию Val, например:
sum=sum + Val(MSFlexGrid1.Тext)
Свойства Rows и Cols позволяют определить количество строк и столбцов в сетке. Наличие заголовков у строк и столбцов можно установить с помощью свойств FixedRows и FixedCols. Содержимое заголовков определяется свойством FormatString. Например, следующей пример показывает, как установить заголовки столбцов сетки:
s$ = "<Код товара |<Дата зак.|<Код покуп.|>Кол-во |<Наименов. товара|<Цена "
MSFlexGrid1.FormatString = s$
Заголовки строк сетки определяются аналогичным образом, только в начало строки необходимо поместить символ “точка с запятой”, который укажет сетке, что это именно заголовки строк:
s$ = Имя|Адрес|Телефон"
MSFlexGridl1.FormatString = s$
Получить или установить содержимое произвольной ячейки позволяет свойство TextArray. Это свойство имеет синтаксис:
MSFlexGrid1.TextArray(cellindex) [= string]
где string — текстовое содержимое ячейки, определенной аргументом cellindex. Аргумент cellindex представляет собой индекс ячейки в сетке и рассчитывается следующим образом. К номеру колонки произвольной ячейки прибавляется произведение ее номера строки на общее количество колонок в сетке, определенное свойством Cols. Для расчета аргумента cellindex удобно использовать следующую функцию:
Function GetCellIndex(row As Integer, col As Integer) As Long GetCellIndex = row*MSFlexGrid1.Cols + col End Function
При операциях со строками и колонками объекта MSFIexGrid следует помнить, что отсчет строк и колонок ведется не с единицы, а с нуля. Таким образом, первая строка сетки, в которой обычно находятся заголовки, на самом деле является нулевой строкой.
Для демонстрации использования объекта MSFlexGrid создадим приложение, предназначенное для просмотра полей базы данных, содержащей информацию о покупателях, сделанных ими заказах и товарах.
База данных CASTOMER.MDB включает в себя три таблицы:
CASTOMER — содержит информацию о покупателях,
ORDERSALES — содержит информацию о сделанных ими заказах,
PRODUCTS — содержит информацией о товарах.
Структуры таблиц базы данных показаны в следующих таблицах.
Таблица. Структура таблицы CASTOMER
Поле ∙ Описание
Idcust ∙ Код покупателя
Name ∙ Имя
LastName ∙ Фамилия
Concern ∙ Предприятие
Address ∙ Адрес
Phone ∙ Телефон
Note ∙ Примечание
Таблица. Структура таблицы ORDERSALES
Поле ∙ Описание
Idprod ∙ Код товара
Dateorder ∙ Дата заказа
idcust ∙ Код покупателя
numorder ∙ Количество заказанного товара
Datesale ∙ Дата продажи
numsale ∙ Количество проданного товара
Note ∙ Примечание
Таблица. Структура таблицы PRODUCTS
Поле ∙ Описание
Idprod ∙ Код товара
Product ∙ Наименование товара
Price ∙ Цена за единицу товара
Repository ∙ Наличие товара на складе
Note ∙ Примечание
Связь между таблицами осуществляется на основании значений совпадающих полей idcust и Idprod.
Создайте новый проект и расположите на форме два объекта управления данными, пять меток, четыре текстовых окна, командную кнопку и объект управления MSFIexGrid. Размещение объектов показано на рис. 9.1.
Рис. 9.1. Расположение элементов управления на экранной форме
В окне свойств первого объекта управления данными установите свойство DataBaseName как имя базы данных CASTOMER.MDB. Затем определите свойство RecordSource этого объекта как CASTOMER. У второго объекта Data установите свойство DataBaseName аналогичным образом, а его свойство RecordSource определим позднее в коде программы и оно будет устанавливаться должным образом во время выполнения приложения. Этот объект можно сделать невидимым, установив его свойство Visible в False.
Определите свойства меток, текстовых окон и объекта MSFIexGrid следующим образом:
Label1.Caption=Имя
Label2.Caption=Фамилия
Label3.Caption=Предприятие
Label4.Caption=Код покупателя
Label5.Caption=Заказы
Text1.DataSource=Data1
Text1.DataField=Name
Text2.DataSource=Data1
Text2.DataField=LastName
Text3.DataSource=Data1
Text3.DataField=Concern
Text4.DataSource=Data1
Text4.DataField=Id_Cust
DataSource=Data2
FixedCols=0
FixedRows=1
Cols=2
Rows=2
Теперь установите свойство Caption командной кнопки как “Просмотр заказов” и добавьте в процедуру обработки нажатия кнопки следующий код:
Private Sub Command1_Click()
' Определим источник данных для объекта
Data2 Dim str As String
str = "SELECT ORDERSALES.Id_prod, PRODUCT.product, PRODUCT.price,
ORDERSALES.num_order, ORDERSALES.Date_order, ORDERSALES.Id_cust, ORDERSALES.Date_sale, ORDERSALES.num_sale FROM ORDERSALES, PRODUCT WHERE ordersales.Id_cust=" + Text4.Text + "AND ordersales.id_prod = product.id_prod"
Data2.RecordSource = str
Data2.Refresh
' Установим Заголовки столбцов у объекта MSFlexGrid
s$ = "<Код товара |<Наименов. товара |<Цена |<Кол-во |<Дата заказа |<Код покуп. |<Дата продажи |<Кол-во прод. "
MSFlexGrid1.FormatString = s$
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
MSFlexGrid1.row = MSFlexGrid1.Rows — 1
MSFlexGrid1.col = 0 MSFlexGrid1.Text = "Всего:"
MSFlexGrid1.col = 1
' Расчет суммы заказа
Dim i As Integer
Dim sum As Double
sum = 0
For i = MSFlexGrid1.FixedRows To MSFlexGrid1.Rows — 1 sum = sum + Val(MSFlexGrid1.TextArray(GetCellIndex(i, 2))) *
Val(MSFlexGrid1.TextArray(GetCelllndex(i, 3)))
Next
MSFlexGrid1.Text = CStr(sum) + " руб."
MSFlexGrid1.row = 1
MSFlexGrid1.col = 1
End Sub
Function GetCellIndex(row As Integer, col As Integer) As Long GetCellIndex = row * MSFlexGrid1.Cols + col
End Function
Сохраните и запустите проект. Результат работы приложения показан на рис. 9.2.
Рис. 9.2. Результат работы приложения
Улучшенное текстовое окно (RichTextBox)
Возможностей обычного текстового окна в большинстве случаев достаточно для отображения текстовой информации из базы данных. Однако, у него есть один недостаток — текстовое окно не допускает форматирования текста. Если необходимо хранить в базе данных текст с элементами форматирования, вы можете использовать улучшенное текстовое окно (RichTextBox). Этот объект управления позволяет работать со шрифтами, изменять атрибуты у выделенного фрагменты текста (полужирный, курсив, подчеркнутый или перечеркнутый), осуществлять различные виды выравнивание текста (по левому краю окна, по правому краю окна или по центру), устанавливать отступы и выступы у абзацев и др.
Все эти функции реализованы посредством поддержки этим объектом управления формата RTF (Rich Text Format — расширенный текстовый формат). Объект RichTextBox транслирует текст в формате RTF и выполняет форматирование и отображение текста на экранной форме.
С базой данных RichTextBox связывается установкой свойств DataSource и DataField. Тип поля в базе данных формата MS Access, с которым связывается объект RichTextBox, должен быть Binary или Memo. Если используется другой формат, то поле должно быть большой емкости (например, типа Text у базы данных Microsoft SQL Server).
По умолчанию RichTextBox недоступен на панели инструментов Visual Basic. Добавить его в проект можно выполнив команду меню Project->Components и отметив контрольный индикатор Microsoft Rich ТехВох Control в окне объектов управления (Controls). После этого но панели инструментов появится его пиктограмма ~
Создадим с помощью приложения VisData базу данных RICH.MDB, единственная таблица TEXTS которой содержит два поля Id (типа Integer) и Textl (типа Memo).
В демонстрационном приложении предусмотрим возможность форматирование текста изменением следующих нескольких свойств объекта RichTextBox: SelBold, Selltalic, SelUnderline и SelStrikeThru. Возможные установки этих свойств приведены в таблице.