Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MS_VB_dop_vozm_5_04.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
1.64 Mб
Скачать
    1. Элемент управления msFlexGrid

Для отображения (и только для отображения, редактирование невозможно) информации из присоединяемой на этапе выполнения базы данных удобно использовать элемент управления MSFlexGrid (Сетка). Сетка является двумерной таблицей, позволяющей эквивалентно отображать таблицы реляционных баз данных. Рассмотрим свойства сетки, необходимые для отображения таблиц базы данных:

  • Cols (Колонки) - число колонок в сетке.

  • Rows (Строки) - число строк в сетке.

  • GridLines - изображение линий сетки (True - линии сетки изображаются, False - нет).

  • GridLinesWidth - ширина сетки таблицы.

  • Col, Row определяет или устанавливает активную ячейку (номера колонки и строки соответственно). Синтаксис: имя_сетки.Col [= номер], имя_сетки.Row [= номер]. Доступны только на этапе выполнения.

  • HighLight определяет подсветку выделенной ячейки сетки (True - подсветка есть, False - нет).

  • FixedCols (Фиксированные колонки) - количество фиксированных колонок (отсчет от левого края) для отображения заголовков таблицы. Эти колонки нельзя прокручивать и они выделяются серым фоном.

  • FixedRows (Фиксированные строки) - количество фиксированных строк (отсчет сверху вниз) для отображения заголовков. Эти строки нельзя прокручивать и они выделяются серым фоном.

  • ScrolBars (Линейки прокрутки) - горизонтальная и вертикальная линейки прокрутки для отображения невидимых колонок и строк (ScrolBars = 0 - нет линеек прокрутки, 1 - горизонтальная линейка прокрутки, 2 - вертикальная линейка прокрутки, 3 - обе линейки прокрутки).

  • ColWidth (Ширина колонки), RowHeight (Высота строки) - ширина колонки и высота строки. Измеряются в twips (1/20 пункта).

  • Text - содержимое текущей ячейки.

  • TabStop - возможность использования клавиши табуляции для движения по ячейкам сетки (True - возможно, False - невозможно).

  • DataSourse – источник данных (имя элемента Data).

Методы AddItems и RemoveItem позволяют соответственно добавить или удалить заданную строку сетки.

Для задания свойств сетки можно использовать специальные диалоговые окна (щелчок мыши по полю Custom в списке свойств, рис. 7.5). Окно позволяет задать основные свойства сетки (General), а также фонты (Fonts) и цветовую палитру (Color).

Пример 7.3. Рассмотрим пример приложения, которое открывает существующую на компьютере базу данных, выдает список таблиц базы данных и выводит выбранную пользователем таблицу в сеточную форму. Будем использовать уже рассмотренную выше базу данных по поставщикам и товарам на складе (рис. 7.1). Используются элементы управления: Data (имя – Data1), MSFlexGrid (имя – Grid1), командная кнопка (имя – ConnectBtn), комбинированный список (имя – Combo1) и Common Dialog (имя – CommonDialog1). Форма на этапе разработки имеет вид, показанный на рис. 7.6.

Рис. 7.5. Диалоговое окно для задания свойств сетки

Рис. 7.6. Общий вид интерфейса

Алгоритм работы приложения следующий. При щелчке мыши по командной кнопке «Подключить», появляется стандартное диалоговое окно для выбора файла базы данных.

После выбора файла базы данных программно формируется список таблиц выбранной базы данных, который выводится в комбинированное окно.

После выбора элемента списка (таблица базы данных) содержимое таблицы выводится на сетку. Линейки прокрутки сетки позволяют просматривать все поля таблицы или запроса.

Текст процедур обработки событий программы, приведен ниже.

Option Explicit

Private Sub Combo1_Click()

'Выбор таблицы из списка и заполнение сетки её данными

FillGridTable Combo1.Text

End Sub

Private Sub ConnectBtn_Click()

'запуск диалога "Открыть файл", по кнопке «Подключить»

Const vbOFNPATHMUSTEXIST = &H800&

Const vbOFNFILEMUSTEXIST = &H1000&

Combo1.Clear

CommonDialog1.DefaultExt = "MDB"

CommonDialog1.FileName = ""

CommonDialog1.Filter = "Базы данных _

MS Access(*.MDB)|*.MDB"

CommonDialog1.Flags = vbOFNPATHMUSTEXIST

CommonDialog1.Action = 1

If CommonDialog1.FileName = "" Then Exit Sub

OpenDataBase CommonDialog1.FileName

End Sub

Public Sub OpenDataBase(ByVal DataFile As String)

'Открытие базы данных и заполнение Combo1 списком таблиц

Dim I As Integer

Data1.Connect = "Access"

Data1.DatabaseName = DataFile ‘имя БД

Data1.RecordSource=””

Data1.Refresh

Combo1.Clear

For I = 1 To Data1.Database.TableDefs.Count - 1

Combo1.AddItem Data1.Database.TableDefs(I).Name

Next

Combo1.Text = ""

End Sub

Private Sub FillGridTable(ByVal QueryString As String)

'заполнение MSFlexGrid1 данными из таблицы

Dim I As Integer, CellWidth As Integer

Data1.RecordSource = QueryString ‘имя таблицы

MSFlexGrid1.Cols = _

Data1.Database(QueryString).Fields.Count

MSFlexGrid1.Row = 0

For I = 0 To Data1.Database(QueryString) _

.Fields.Count - 1

MSFlexGrid1.Col = I

MSFlexGrid1.Text = _

Data1.Database(QueryString).Fields(I).Name

MSFlexGrid1.ColWidth(I) = _

TextWidth(MSFlexGrid1.Text) + 100

Next

Data1.Refresh

If Not Data1.Recordset.EOF Then _

Data1.Recordset.MoveLast

MSFlexGrid1.Rows = Data1.Recordset.RecordCount + 1

If Not Data1.Recordset. BOF Then _

Data1.Recordset.MoveFirst

MSFlexGrid1.Row = 0

Do While Not Data1.Recordset.EOF

MSFlexGrid1.Row = MSFlexGrid1.Row + 1

For I = 0 To Data1.Database(QueryString) _

Fields.Count - 1

MSFlexGrid1.Col = I

If IsNull(Data1.Recordset.Fields(I).Value) Then _

MSFlexGrid1.Text = ""

Else: MSFlexGrid1.Text = _

Data1.Recordset.Fields(I).Value

End If

CellWidth = TextWidth(MSFlexGrid1.Text) + 100

If CellWidth > MSFlexGrid1.ColWidth(I) Then _

MSFlexGrid1.ColWidth(I) = CellWidth

Next I

Data1.Recordset.MoveNext

Loop

End Sub

Процедура ConnectBtn_Click обеспечивает очистку комбинированного списка и обращение к стандартному окну «Открыть файл» с заданным расширением (*.mdb) (рис. 7.7). После выбора файла происходит обращение к процедуре OpenDataBase, в которую передается имя выбранного файла (CommonDialog1.FileName).

Процедура OpenDataBase обеспечивает подключение к базе данных через элемент управления Data (по умолчанию оператором Data1.Connect = " " выбирается формат MS Access) и заполнение комбинированного списка именами таблиц (цикл). Имя базы данных определяется в свойстве Data1.DatabaseName с помощью передаваемого в процедуру параметра DataFile. Из списка можно выбрать нужную таблицу, содержимое которой выводится в сеточную форму (рис. 7.8).

Рис. 7.7. Окно открытия файла

Рис. 7.8. Отображение базы данных в элементе MSFlexGrid

После выбора таблицы, процедура обработки события Combo1_Click вызывает процедуру FillGridTable заполнения сетки, в которую через параметр передается имя выбранной таблицы Combo1.Text.

В процедуре FillGridTable инициализируется множество записей таблицы (оператор Data1.RecordSource = QueryString), определяется количество колонок таблицы (оператор MsFlexGrid1.Cols = Data1.Database(QueryString).Fields.Count); первая строка сетки (MsFlexGrid1.Row = 0) заполняется названиями колонок выбранной таблицы следующим образом:

For I = 0 To Data1.Database(QueryString).Fields.Count-1

MsFlexGrid1.Col = I

MsFlexGrid1.Text = _

Data1.Database(QueryString).Fields(I).Name

MsFlexGrid1.ColWidth(I) = TextWidth(Grid1.Text) + 100

Next I

В этих операторах для задания ширины каждой колонки используется обращение к функции TextWidth, которая возвращает длину выводимого текста.

Количество записей и соответственно количество строк сетки определяется операторами

Data1.Refresh

MsFlexGrid1.Rows = Data1.Recordset.RecordCount + 1

Цикл Do-Loop обеспечивает движение по записям (оператор Data1.Recordset.MoveNext) до тех пор, пока функция EOF имеет значение False (т.е. до последней записи). На каждом шаге цикла производится переход к новой строке (MsFlexGrid1.Row = MsFlexGrid1.Row + 1), для которой выполняется цикл (MsFlexGrid1.Col = I) заполнения всех ее ячеек.

Если поле таблицы базы данных не содержит значения (проверяется функцией IsNull(Data1.Recordset.Fields(I).Value)), то соответствующая ячейка сетки заполняется пустой строкой.

Последние операторы обеспечивают согласование ширины ячеек таблицы с максимально возможной длиной поля записи.

CellWidth = TextWidth(MsFlexGrid1.Text) + 100

If CellWidth > MsFlexGrid1.ColWidth(I) Then

MsFlexGrid1.ColWidth(I) = CellWidth.

Заполненная сетка показана на рис. 7.8.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]