Чтение онлайн

на главную - закладки

Жанры

Программирование для карманных компьютеров

Волков Владимир

Шрифт:

44. Двойной щелчок на любом из этих пунктов в дизайнере форм создаст обработчик события щелчка на пункте контекстного меню в редакторе кода. Для трех этих обработчиков надо использовать код, приведенный в листинге 6.23. Листинг 6.23

Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles MenuItem1.Click

PictureBox3_Click(sender, e)

End Sub

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles MenuItem2.Click

PictureBox4_Click(sender, e)

End Sub

Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles MenuItem3.Click

PictureBox5_Click(sender, e)

End Sub

45. Выделить компонент ListView1 и в окне Properties установить для него свойство ContextMenu равным ContextMenu1.

46. Теперь после запуска программы при нажатии стилусом на компоненте ListView в окне будет всплывать контекстное меню с заданными пунктами. Естественно, выбор любого из пунктов будет приводить к тому же результату, что и щелчок на соответствующих компонентах PictureBox (рис. 6.18).

Рис. 6.18. Контекстное меню компонента ListView.

47. Положить на область размещения невидимых компонентов компонент Image-List. Выделить этот компонент, перейти в окно Properties и нажать кнопку вызова окна редактирования свойства Images. Нажимая кнопку Add в этом окне, нужно добавить к коллекции изображений файлы Add.jpg, Edit.jpg и Delete.jpg.

48. Разместить на форме справа от основного меню компонент ToolBar. Перейти в окно Properties и найти свойство ImageList. Оно должно получить значение ImageListl. Затем нужно нажать кнопку редактирования свойства Buttons. На экран будет выведено окно редактирования коллекции кнопок. При помощи кнопки Add нужно добавить к коллекции три кнопки и для каждой из них установить в правой области окна свойство Imagelndex равным, соответственно, О, 1 и 2.

49. На форме станут видимыми кнопки панели инструментов. Двойным щелчком на каждой из этих кнопок нужно создать обработчик события и вписать в него тот же код, что и для событий щелчка на пунктах

контекстного меню. Теперь можно запустить проект и проверить его работу.

Конечно, в программе еще много можно сделать, чтобы она была полнофункциональной. Нужно позаботиться о возможности редактирования списка категорий и о сохранении данных не только за один год. Кроме этого, нужно добавить к программе функциональность, которая позволяет создавать отчеты. Эти отчеты будут показывать, сколько времени и на что потрачено за день, неделю, месяц и год. Но всю эту функциональность читатель может добавить самостоятельно.

Работа с компонентом DataSet

Конечно, работу с данными в рассмотренном примере можно было организовать гораздо проще. Хранение данных в формате XML, их запись и считывание не обязательно осуществлять вручную. В.NET CF есть куда более элегантное решение, позволяющее использовать класс DataSet. Для того чтобы разобраться с правилами работы этого класса, можно несколько изменить пример, переработав тот фрагмент, который будет нужен для ознакомления с особенностями взаимодействия компонентов DataGrid, DataSet, DataTable и информации в формате XML.

Упражнение 6.3

1. Создать новый проект VB.NET для Pocket PC с именем XMLDBLocal.

2. Выполнить команду Project ? Add Existing Item, в открывшемся диалоговом окне нужно найти файл Form2.vb из папки проекта MyTime и добавить его к текущему проекту. Точно так же нужно добавить файл data.vb.

3. Разместить на форме компоненты MainMenu, ImageList и ToolBar, как это было сделано в прошлом проекте. Затем нужно разместить на свободной части формы компонент DataGrig, как показано на рис. 6.19.

Рис. 6.19. Основная форма проекта.

4. Скопировать на эмуляторе файл Category.xml из каталога проекта MyTime в каталог проекта XMLDBLocal.

5. На этом подготовительная часть закончена. Теперь надо перейти к работе с данными. Для начала нужно добавить в код класса формы переменные, как это показано в листинге 6.24.

Листинг 6.24

Dim ds As DataSet = New DataSet

Dim dt As DataTable = New DataTable

Dim D As DateTime

Dim strTime, strFileName, dirStr As String

6. Написать код, выполняемый при загрузке формы, который приведен в листинге 6.25. Листинг 6.25

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles MyBase.Load

\'Эти две строки включены потому, что в инспекторе свойств у DataGrid

\'невозможно изменить параметры шрифта, а сделать это очень хочется,

\'так как шрифт по умолчанию практически нечитаемый

Dim mFont As Font = New Font(«Arial», 10, FontStyle.Bold)

DataGrid1.Font = mFont

\'Определяем имя текущего каталога и файла

D = DateTime.Now

strTime = D.ToShortDateString

strTime = strTime.Replace(".", "_")

strFileName = "\" + strTime +".xml"

dirStr = IO.Path.GetDirectoryName_

(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)

\'Если файла нет, то создаем его

If Not IO.File.Exists(dirStr + strFileName) Then

\'Таблица создается пустой, и ее надо заполнить полями. Каждое поле

\'сначала создается как отдельный объект, затем добавляется к таблице

Dim myCount As Integer

Dim dcCat As New System.Data.DataColumn(«Category»)

dt.Columns.Add(dcCat)

Dim dcStartOf As New System.Data.DataColumn(«StartOf»)

dt.Columns.Add(dcStartOf)

Dim dcEndOf As New System.Data.DataColumn(«EndOf»)

dt.Columns.Add(dcEndOf)

Dim dcNote As New System.Data.DataColumn(«Note»)

dt.Columns.Add(dcNote)

\'Устанавливаем имя таблицы. Этот момент важен для работы с DataGrid

dt.TableName = «myTable»

\'Добавляем таблицу к компоненту DataSet.

ds.Tables.Add(dt)

Else

\'Если файл с содержимым DataSet уже существует, просто грузим его в Dataset

ds.ReadXml(dirStr + strFileName)

End If

\'Источником данных для DataGrid не может быть сам DataSet, поскольку

\'Dataset может содержать в себе несколько таблиц. Мы выбираем одну

\'определенную таблицу и указываем ее в качестве источника данных

DataGrid1.DataSource = ds.Tables(0)

\'И делаем видимыми заголовки в DataGrid

DataGrid1.ColumnHeadersVisible = True

End Sub

7. Нужно написать код обработчика щелчка на кнопке добавления записи, который приведен в листинге 6.26. Листинг 6.26

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick

If e.Button Is ToolBarButton1 Then

Dim str(3) As String

Dim editFrm As New Form2

editFrm.Send = 3

Dim countInt As Integer

If ds.Tables(0). Rows.Count <> 0 Then

countInt = ds.Tables(0). Rows.Count – 1

categorySt = ds.Tables(0). Rows(countInt). Item(0)

startOfSt = ds.Tables(0). Rows(countInt). Item(2)

endOfSt = ds.Tables(0). Rows(countInt). Item(2)

noteSt = ""

Else

categorySt = ""

startOfSt = ""

endOfSt = ""

noteSt = ""

End If

If editFrm.ShowDialog = DialogResult.OK Then

str(0) = categorySt

str(1) = startOfSt

str(2) = endOfSt

str(3) = noteSt

ds.Tables(0). Rows.Add(str)

ds.WriteXml(dirStr + strFileName)

End If

End If

End Sub

Этот код мало отличается от кода, который создавался в прошлом проекте. Код форм Form2.vb и Data.vb вообще не изменился. Теперь можно запустить проект и добавить несколько записей. Внешний вид приложения должен соответствовать тому, что показано на рис. 6.20.

Рис. 6.20. Программа с ненастроенным DataGrid.

Как видите, внешний вид у таблицы получился не очень хорошим. Чтобы таблица хорошо выглядела, ее надо настроить.

8. Следует остановить программу и вернуться к дизайнеру форм. В нем нужно выделить DataGrid1 и перейти в инспектор свойств, где следует нажать кнопку вызова редактора свойства TableStyles. На экран будет выведено окно добавления стилей. Нажатием на кнопку Add создается новый стиль, который нужно связать с таблицей, указав имя таблицы MyTable в поле MappingName. Там же надо выбрать свойство GridColumnStyles и нажать кнопку редактирования этого свойства. На экран будет выведено очередное окно. При помощи кнопки Add следует добавить стиль для каждого поля таблицы, заполняя соответствующие поля с правой стороны окна. Для этого можно воспользоваться информацией из табл. 6.9.

Таблица 6.9. Стили полей DataGrid

9. Заполнять все эти свойства нужно аккуратно. Если не будет найдено имя таблицы, то DataGrid окажется пустым, если же для какого-либо поля не будет найдено или окажется неверно MappingName, то это поле не будет отображено в таблице. Кстати, это можно делать специально, скрывая от пользователя какие-то поля, информация из которых не должна быть ему видима. После заполнения этих настроек нужно снова запустить программу и убедиться, что введенная информация отображается в таблице. Программа должна выглядеть так, как показано на рис. 6.21.

Рис. 6.21. Исправленный DataGrid.

Компоненты и классы для работы с данными

Следует подробнее рассмотреть компоненты работы с данными, которые были использованы в примере. В этом разделе будут описываться только основные классы из пространства имен System.Data. Список классов и компонентов и краткие сведения об их назначении сведены в табл. 6.10. Следует обратить внимание, что большинство компонентов, сходных по назначению, существуют в варианте для работы с MS SQL Server на десктопе и для SQL Server на Pocket PC.

Таблица 6.10. Компоненты для работы с данными

DataColumn

Класс DataColumn предназначен для создания и конфигурирования поля в таблице DataTable. Нельзя использовать созданный объект типа DataTable, пока в него не будет добавлено необходимое количество полей нужного типа. Если объект типа DataSet создается программно, разработчик должен в коде модуля создавать поля и таблицы. Если DataSet заполняется данными при помощи объекта DataAdapter или загружается из файла XML, то создание таблиц и полей в них происходит без участия программиста.

Класс DataColumn имеет всего два метода. Метод GetType позволяет получить текущий тип объекта (то есть System.Data.DataColumn), а метод ToString возвращает его строковое представление.

Основная функциональность класса сосредоточена в свойствах, чтение или запись которых и представляет особую ценность при работе с DataColumn. Эти свойства перечислены в табл. 6.11.

Таблица 6.11. Свойства класса DataColumn

DataRow

Объект DataRow представляет собой одну строку данных в объекте таблицы DataTable. Именно этот объект чаще всего используется при редактировании данных в таблице.

Методы и свойства объекта DataRow приведены в табл. 6.12 и 6.13.

Таблица 6.12. Методы класса DataRow

Таблица 6.13. Свойства класса DataRow

DataTable

Класс DataTable представляет собой обычную таблицу базы данных. В нем хранится сочетание полей, записей и ограничений, с которыми можно взаимодействовать через коллекции объектов соответствующего типа. Именно три коллекции полей, записей и ограничений и составляют таблицу.

В табл. 6.14 и 6.15 даны описания методов и полей класса DataTable.

Таблица 6.14. Методы класса DataTable

Таблица 6.15. Свойства класса DataTable

DataSet

Класс DataSet

предназначен для работы с данными из разных источников. Он инкапсулирует в себе функциональность, позволяющую создавать кэшируемое отображение данных в памяти. Классы DataColumn, DataRow и DataTable структурируют содержимое объекта DataSet, а класс DataAdapter наполняет эти структуры данными. Впрочем, для этих же целей можно использовать методы объекта DataSet.

Именно DataSet обеспечивает разнообразие приемов работы с данными в. NET CF. Программист может работать с локальной или внешней базой данных, может использовать однозвенный режим или веб-сервисы в качестве источников данных. Методы и свойства объекта DataSet описаны в табл. 6.16 и 6.17.

Таблица 6.16. Методы класса DataSet

Таблица 6.17. Свойства класса DataSet

SqlDataAdapter и SqlCeDataAdapter

Как уже говорилось, два этих класса должны обеспечивать двустороннюю связь объекта DataSet с базой данных. Они заполняют DataSet данными и обеспечивают возвращение измененных данных на сервер. Методы и свойства этих классов приведены в табл. 6.18 и 6.19.

Таблица 6.18. Методы классов SqlDataAdapter и SqlCeDataAdapter

Таблица 6.19. Свойства классов SqlDataAdapter и SqlCeDataAdapter

SqlDataReader и SqlCEDataReader

Классы SqlDataReader и SqlCEDataReader предоставляют методы для однопроходной выборки нужных данных и результата выполнения команды для отображения этих данных в элементах управления или построения отчетов. Свойства и этих объектов приведены в табл. 6.20 и 6.21.

Таблица 6.20. Методы классов SqlDataReader и SqlCeDataReader

Таблица 6.21. Свойства классов SqlDataReader и SqlCeDataReader

SqlCommand и SqlCeCommand

Эти классы позволяют выполнить SQL-команду в заданной базе данных. Их свойства и методы приведены в табл. 6.22 и 6.23.

Таблица 6.22. Методы классов SqlCommand и SqlCeCommand

Таблица 6.23. Свойства классов SqlCommand и SqlCeCommand

SqlConnection и SqlCeConnection

Эти классы позволяют реализовать непосредственное соединение с базой данных. Их свойства и методы приведены в табл. 6.24 и 6.25.

Таблица 6.24. Методы классов SqlConnection и SqlCeConnection

Таблица 6.25. Свойства классов SqlConnection и SqlCeConnection

Работа с SQL Server CE

Установка

Для того чтобы установить SQL Server CE на ваше устройство или эмулятор, не потребуется предпринимать каких-либо особенных усилий. Среда разработки MS Visual Studio 2003 имеет в своем составе все необходимое. Надо только включить соответствующие ссылки в раздел проекта References (это делается в окне Solution Explorer), чтобы SQL Server CE и инструменты разработчика были установлены как на эмулятор, так и на устройство во время поставки проекта.

Файлы, которые будут установлены на устройство (эмулятор), можно найти в каталогах, которые приведены в следующем списке.

? В каталоге <каталог установки Microsoft Visual Studio.NET>\CompactFrameworkSDK\ v1.0.5000\Windows CE располагается файл sqlce.chm, в котором подробно описаны возможности, порядок установки и способы работы с SQL Server CE, а также установочные файлы для Microsoft SQL Server CE Server Tools (файлы sqlce20sql2ksp1.exe и sqlce20sql2ksp2.exe).

? В каталогах <каталог установки Microsoft Visual Studio.NET>\CompactFrameworkSDK\ v1.0.5000\Windows CE\wce300\<тип процессора> и <каталог установки Microsoft Visual Studio.NET>\CompactFrameworkSDK \v1.0.5000\Windows CE\wce400\<тип процессора> находится установочные файлы, которые будут автоматически поставлены на устройство и установлены, если включить в программу ссылку на компонент System.Data.SqlServerCe или System.Data.SqlClient.

? В каталоге <каталог установки Microsoft Visual Studio.NET>\CompactFrameworkSDK\ v1.0.5000\Windows CE\Samples можно найти примеры создания приложений для Pocket PC и WindowsCE.

Настройка

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

Поскольку предполагается использовать SQL Server CE, то было бы неплохо иметь демонстрационную базу данных, установленную на устройстве (эмуляторе) и подключенную к серверу. Поэтому в новом упражнении сначала будет скопирована демонстрационная база данных на эмулятор. Также потребуется задать некоторые настройки сервера. Эмулятор в данном примере используется именно потому, что с ним могут возникнуть некоторые проблемы при копировании файлов.

Упражнение 6.4

1. Создать новый проект VB.NET для Pocket PC с именем myDB.

2. Добавить в него ссылки на компоненты System.Data.Common и System.Data. SqIServerCe. Для этого нужно выполнить команду Project ? Add reference и в окне, которое будет выведено на экран, в списке двойным щелчком выделить строку System.Data.Common. То же самое нужно сделать со строкой System.Data. SqIServerCe, после чего следует нажать кнопку ОК. Добавленные ссылки можно увидеть в окне Solution Explorer, раскрыв папку References. Эти действия уже приведут к установке SQL Server CE на эмулятор.

3. Копирование файла демонстрационной базы данных можно сделать либо при помощи включения файла в состав проекта, либо при помощи копирования через разделяемую папку. Нужно рассмотреть оба варианта.

• Сам файл находится в каталоге <Каталог установки Microsoft Visual Studio.NET 2003>\CompactFrameworkSDK\vl.0.5000\Windows CE\Samples\VB\Pocket PC\ NorthwindCE с именем NorthwindDemo.sdf. Для того чтобы поручить среде скопировать этот файл на эмулятор, его надо включить в состав проекта. Для этого требуется выполнить команду Project ? Add Existing Item. В окне, которое будет выведено на экран, нужно найти в указанном выше каталоге файл NorthwindDemo.sdf и открыть его. Файл будет добавлен к проекту. В окне Solution Explorer следует отыскать этот файл, выделить его, а в окне Properties установить значение свойства Build action в Content. Это покажет среде, что файл надо просто скопировать в папку программы на эмуляторе. Теперь следует выполнить команду Build ? Deploy Solution. В строке статуса среды и на экране эмулятора можно увидеть, как последовательно будут установлены сначала указанные пакеты, затем сама программа, и наконец на эмулятор будет скопирован файл NorthwindDemo.sdf. После того, как весь этот процесс завершится, можно на эмуляторе переместить файл из каталога программы в папку My Documents.

• В папке Start ? Programms на эмуляторе можно найти пиктограмму SQLCE Query. Она позволяет запустить Query Analyzer и свидетельствует о том, что SQL Server CE был удачно установлен на эмулятор. Следует запустите эту программу. На экран будет выведено следующее базовое окно (рис. 6.22).

Рис. 6.22. Окно администрирования SQL Server CE.

После нажатия кнопки

на экран будет выведено окно подключения базы данных. В этом окне нужно нажать кнопку Path, в открывшемся диалоге найти файл NorthwindDemo.sdf, а затем нажать кнопку Connect. Справа от папки Databases в окне Query Analyzer появится новый элемент. Развернув его, можно найти базу данных, ее таблицы и все ее объекты. Не забудьте отключить базу данных и закрыть Query Analyzer, иначе при работе с приложением будет возникать ошибка. Настройка базы данных для подключения окончена.

• Чтобы скопировать файл NorthwindDemo.sdf на эмулятор вручную, используя разделяемый каталог, надо произвести некоторые действия как на рабочей станции, так и на эмуляторе. Сначала надо на рабочей станции создать разделяемый каталог. Для этого надо выбрать папку, которая будет общей, вызвать ее контекстное меню, выполнить команду Общий доступ и безопасность, установить флажок Открыть общий доступ к этой папке и нажать кнопку OK. Файл NorthwindDemo.sdf надо скопировать в эту папку. Затем надо на эмуляторе запустить программу File Explorer, нажать кнопку

в окне запроса ввести путь \\<имя компьютера>\<имя папки> и нажать кнопку OK. Папка будет открыта, и можно будет скопировать из нее файл NorthwindDemo.sdf на эмулятор.

Подключение приложения к базе данных

Теперь можно приступить к созданию приложения.

4. Расположить на форме компоненты Button, Label и TextBox так, как это показано на рис. 6.23, и соответствующим образом установить их свойство Text.

Рис. 6.23. Расположение компонентов на форме.

5. Объявить в начале класса формы несколько переменных, как это показано в листинге 6.27. Листинг 6.27

Dim dbc As SqlServerCe.SqlCeConnection

Dim dbcm As SqlServerCe.SqlCeCommand = New

_SqlServerCe.SqlCeCommand(«SELECT * FROM Customers»)

Dim dba As SqlServerCe.SqlCeDataAdapter

Dim dbt As DataTable

6. Написать код процедуры нажатия кнопки Connect, который приведен в листинге 6.28. Листинг 6.28

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button1.Click

\'Создаем объект соединения

dbc = New SqlServerCe.SqlCeConnection

\'Задаем значение строки соединения

dbc.ConnectionString = «Data Source=\NorthwindDemo.sdf»

\'Создаем объект таблицы

dbt = New DataTable(«Customers»)

\'Связываем объект команды и соединение

dbcm.Connection = dbc

\'Создаем объект адаптера, в качестве аргумента передавая ему команду

dba = New SqlServerCe.SqlCeDataAdapter(dbcm)

\'Адаптер выполняет команду, и результатом ее выполнения заполняет

\'таблицу dba.Fill(dbt)

\'Связываем элементы отображения данных с полями таблицы

TextBox4.DataBindings.Add(«Text», dbt, «CustomerID»)

TextBox5.DataBindings.Add(«Text», dbt, «CompanyName»)

TextBox6.DataBindings.Add(«Text», dbt, «ContactName»)

TextBox7.DataBindings.Add(«Text», dbt, «City»)

TextBox8.DataBindings.Add(«Text», dbt, «Country»)

TextBox9.DataBindings.Add(«Text», dbt, «Phone»)

TextBox10.DataBindings.Add(«Text», dbt, «FAX»)

End Sub

Поделиться:
Популярные книги

Печать Пожирателя

Соломенный Илья
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Печать Пожирателя

Привет из Загса. Милый, ты не потерял кольцо?

Лисавчук Елена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

У врага за пазухой

Коваленко Марья Сергеевна
5. Оголенные чувства
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
У врага за пазухой

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит