- •4. Работа Со структурированными данНЫми в пРиложениЯх на vb в среде vs 2008
- •4.1. Работа со списками. Элементы управления ListBox, ComboBox
- •4.2. Использование в проекте списков
- •4.3. Совместное использование списков, флажков и переключателей
- •Задания для самостоятельного выполнения
- •Форма для данных сотрудника организации.
- •5. Данные по интернет-магазину бытовой техники.
- •6. Данные по пациентам ветеринарной лечебницы для кошек.
- •4.4. Создание таблиц данных
- •Задания для самостоятельного выполнения
- •1. Заводчики лошадей
- •2. Сотовые телефоны
- •3. Страны и столицы
- •4. Фрукты
- •5. Электронные книги
- •6. Легковые автомобили
6. Данные по пациентам ветеринарной лечебницы для кошек.
Создать форму, содержащую:
1) список 1 с полом и кличками,
2) список 2 с датой последнего посещения,
3) список 3 с размером последнего платежа,
4) кнопку «Добавить» и вспомогательные поля,
5) кнопку для удаления кошки из списка1,
6) кнопки для удаления всех кошек.
При начальной загрузке формы в списке должно быть 3 кошки:
1.Кот Мурзик,14.07.2012 , 200
2. Кошка Муся,10.05.2012 , 700
3. Кот Василий,26.06.2012 , 400
4.4. Создание таблиц данных
Таблицы являются двумерными массивами. Рассмотрим основы работы с ними в VB. Основное назначение таблиц в - обмен информацией с базами данных. Однако наряду с этим таблицы имеют самостоятельное значение как хранилище и источник структурированных данных, используемых в программных приложениях. Рассмотрим, каким образом можно создать таблицу, оформить ее должным образом и заслать в нее необходимые данные.
Пример 3. Создать форму, в которой при начальной загрузке будет создаваться
таблица с наименованием Contacts, содержащая индивидуальные данные сотрудников. Наименование ее столбцов - Last Name, First Name, Phone Number, Email Address. Она должна включать данные по 4 сотрудникам (разбивка по колонкам):
1) Jackson - Jennie - 787-878-8263 - JennieJackson@nowhere.com,
2) Kevlar - Kurt - 872-348-7263 - kurtk@militant.com,
3) Llama - Linda - lllama@weaver.com,
4) Mandrake - Marcus - 398-787-4764 - marcus@marcusrocks.com.
Указания к выполнению.
I. Выполним предварительные действия. Создаем новый проект с именем PR_Tab, так же, как и ранее (Глава 3). Переходим в автоматически созданную пустую форму Form1. В списке ToolBox разворачиваем пункт Data (данные), в котором собраны элементы управления необходимые для работы с базами данных.
II. В пункте Data выбираем элемент DataGridView (рис 4.4). Он обеспечивает отображения информации из БД в виде таблицы. Перетаскиваем его на свободное место формы Form1.
Рис.4.4. Выбор в списке ToolBox пункта Data и его элемента DataGridView
III. После переноса элемента на форму, появится всплывающая панель (рис. 4.5).
Рисунок 4.5. Всплывающая панель при создании элемента управления
Ее пункт «Choose Data Source(Выберите источник данных)» определяет источник данных для создаваемой таблицы. Это позволяет связать элемент DataGridView с базой данных уже на стадии проектирования формы. Однако в нашем случае этот пункт необходимо оставить без изменений, т.к. целью данной работы является создание таблицы данных непосредственно во время выполнения программы. Пункты «Edit Columns(редактировать столбцы)» и « Add Column( добавить столбец)» позволяют изменить имена загруженных в DataGridView столбцов или же добавить свои столбцы. Ниже идут пункты “Enable Adding (разрешить добавление)”, “Enable editing(разрешить изменение)”, “Enable deleting (разрешить удаление)” и “Enable Column Reordering(Разрешить изменения столбцов)” . Они определяют можно ли будет пользователю, во время выполнения программы , соответственно добавлять, изменять, удалять данные, а так же перемещать столбцы относительно друг друга. Оставьте все поля без изменения. Нажмите «Dock in parent container (закрепить в родительском контейнере)». В данном случае «Родительским» является вся форма. Поэтому, при выборе этого пункта, элемент DataGridView всегда будет по размеру совпадать с размерами клиентской области окна. Это удобно, т.к. в случае большого количества данных в таблице пользователь сможет просто потянуть за границу формы и размер таблицы изменится вместе с ней. Данную панель можно всегда вызвать нажатием на маленький треугольник на верхней границе элемента управления.
IV. В свойствах изменяем свойство Name для элемента DataGridView1 на значение DgContacts.
V. Перейдите к редактору программного кода формы (например, двойным щелчком по ней). Поскольку таблица должна формироваться и заполнялась данными при загрузке формы (событие “Load”), необходимо перейти к обработчику данного события. Для этого в верхней левой части редактора кода выберем «Form1 Events», в правой верхней части выберем событие «Load». Сгенерируется пустая процедура Form1_Load, которая будет выполняться каждый раз при запуске программы. Добавьте в эту процедуру следующий код:
Dim data_table As New DataTable("Contacts")
‘ создание нового экземпляра класса DataTable с именем Contacts
' Определяем стобцы.
data_table.Columns.Add("Last Name", GetType(String))
data_table.Columns.Add("First Name", GetType(String))
data_table.Columns.Add("Phone Number", GetType(String))
data_table.Columns.Add("Email Address", GetType(String))
' вносим данные.
AddTableRow(data_table, "Иванов", "Сергей", "787-878-8263", "SIvanov@mail.ru")
AddTableRow(data_table, "Петров", "Иван", "872-348-7263", "kurtk@militant.com")
AddTableRow(data_table, "Орлова", "Ольга", "", "eagle_O@mail.ru ")
AddTableRow(data_table, "Козлова", "Ирина","398-787-4764","coz_i@yandex.ru")
' Связываем элемент управления DgContacts с нашей таблицей данных
dgContacts.DataSource = data_table
Предложенный код содержит процедуру AddTableRow, которая еще не определена. Ее необходимо поместить между строками «End Sub» и «End Class». Код процедуры:
Private Sub AddTableRow(ByVal data_table As DataTable, ByVal last_name As String, ByVal first_name As String, ByVal phone_number As String, ByVal email_address As String)
‘ создание переменной типа DataRow, представляющей собой одну строку.
Dim data_row As DataRow
data_row = data_table.NewRow() ‘создание новой строки в таблице data_table
‘ Добавление записей в строку
data_row.Item("Last Name") = last_name
data_row.Item("First Name") = first_name
data_row.Item("Phone Number") = phone_number
data_row.Item("Email Address") = email_address
‘ добавление строки к таблице
data_table.Rows.Add(data_row)
End Sub
Таким образом при запуске приложения 4 раза будет вызывается процедура AddTableRow с различными формальными параметрами. Это обеспечивает добавление 4-х строк данных в таблицу формы. Результат работы программы представлен на рис. 4.6.
Рис.1.6. Результат выполнения приложения
Пример 4. Создать форму с таблицей, в которую при начальной загрузке вводятся сведения о моделях видеокарт и их ценах. Реализовать следующие операции с таблицей:
1) добавление новой записи в таблицу,
2) удаление выбранной записи,
3) поиск самой дорогой видеокарты,
4) поиск самой дешёвой видеокарты,
5) удаление всех записей из таблицы.
Рис.4.7. Общий вид формы
Для добавления записи используются компоненты TextBox.
Для выполнения действий используются компоненты Button.
Для выбора варианта поиска используются компоненты RadioGroup.
Указания к выполнению.
1) Разместить на форме необходимые компоненты.
2) Добавить код, исполняемый при начальной загрузке формы, а также процедуру для добавления новой строки в таблицу.
Dim data_table As New DataTable("Components")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
data_table.Columns.Add("Videocard", GetType(String))
data_table.Columns.Add("Memory", GetType(String))
data_table.Columns.Add("Manufacturer", GetType(String))
data_table.Columns.Add("Price", GetType(Integer))
AddTableRow(data_table, "GeForce GTX560Ti", "1280Mb", "Palit", 8699)
AddTableRow(data_table, "GeForce GTX560Ti", "2Gb", "MSI", 8521)
AddTableRow(data_table, "Radeon HD6970 880M", "2Gb", "XFX", 11273)
AddTableRow(data_table, "RADEON HD6850", "1Gb", "ASUS", 5059)
dgComponents.DataSource = data_table
End Sub
Private Sub AddTableRow(ByVal data_table As DataTable, ByVal video As String, ByVal memory As String, ByVal manuf As String, ByVal price As String)
' создание переменной типа DataRow, представляющей собой одну строку.
Dim data_row As DataRow
data_row = data_table.NewRow() 'создание новой строки в таблице data_table
' Добавление записей в строку
data_row.Item("Videocard") = video
data_row.Item("Memory") = memory
data_row.Item("Manufacturer") = manuf
data_row.Item("Price") = price
' добавление строки к таблице
data_table.Rows.Add(data_row)
End Sub
3) Код для кнопки «Добавить запись». Для добавления используется процедура AddTableRow.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
AddTableRow(data_table, TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text)
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End Sub
4) Код для кнопки «Удалить запись».
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
dgComponents.Rows.Remove(dgComponents.CurrentRow)
End Sub
5) Код для кнопки «Удалить всё». Удаление реализовано в цикле: по очереди удаляется каждая запись таблицы.
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim i As Integer
For i = 1 To dgComponents.RowCount - 1
dgComponents.Rows.RemoveAt(0)
Next
End Sub
6) Код для кнопки «Найти». Вначале проверяется, какой компонент RadioGroup выбран, далее в цикле выполняются соответствующие действия (поиск максимального или минимального значения в столбце)
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If RadioButton1.Checked Then
Dim min, a, b As Integer
Dim i As Integer
min = Val(dgComponents.Item(3, 0).Value)
For i = 1 To dgComponents.RowCount - 2
a = dgComponents.Item(3, i).Value
If a < min Then
min = a
b = i
End If
Next
dgComponents.Rows(b).Selected = True
Else
Dim max, a, b As Integer
Dim i As Integer
max = Val(dgComponents.Item(3, 0).Value)
For i = 1 To dgComponents.RowCount - 3
a = dgComponents.Item(3, i).Value
If a > max Then
max = a
b = i
End If
Next
dgComponents.Rows(b).Selected = True
End If
End Sub
