创建Smartphone应用程序和使用SQL Mobile数据
时间:2010-09-09 来源:sunfish
在Visual Studio中创建Windows Mobile 项目
1. 首先启动Visual Studio 2005,点击 Start | All Programs | Microsoft Visual Studio 2005点击Microsoft Visual Studio 2005的图标。
2. 在Visual Studio 2005的菜单栏处点击File | New | Project 弹出New Project对话框。
3. 在“New Project”对话框中“Project types”下展开“Visual C#”节点下的“Smart Device”节点选择“Windows Mobile 5.0 Smartphone”。如图1所示
图1:选择Windows Mobile 5.0 Smartphone device
4. 在“New Project”对话框中的“Templates”下面选择“Device Application”。
5. 在“Name”输入框中输入名称“OrderManager”。
6. 点击“Browse”把路径定位到“C:\Program Files\Windows Mobile Developer Samples\HOLs\MED201_NETCF_APPS_VS2005\Exercises”下点击Open。
7. 点击“OK”。
完成后如图2所示
图2:OrderManager 项目
根据据下列步骤,创建SQL Mobile数据库,在本练习的稍后您还会使用到这个数据源来添加浏览功能。
添加一个新的数据源
1. 在“Microsoft Visual Studio 2005”的菜单栏上点击“Data”、“Add New Data Source”之后将启动“Data Source Configuration Wizard”。
2. 选择“Choose a Data Source type”下面的“Database”点击“Next”如图3所示:
图3:在配置数据源向导中选择数据类型页
3. 点击“New Connection”。
4. 在“Add Connection”对话框中点击“Change”按钮。
5. 对话框中选择“Microsoft SQL Server Mobile Edition”点击“OK”。
注意 如果在第4步中没有出现“Add Connection”对话框,而是出现Choose Data Source对话框,单击Continue,如图4。
图 4:选择数据源
6. 在“Add Connection”对话框中选中“My Computer”如图5所示:
图5:添加连接对话框
7. 在“Add Connection”对话框的“Connection Properties”标题下点击“Browse”按钮。
8. 将路径定位到“C:\Program Files\Windows Mobile Developer Samples\HOLs\MED201_NETCF_APPS_VS2005\Exercises\Orders.sdf”如图6所示点击“Open”按钮。
图6:浏览到Orders.sdf
9. 在“Add Connection”对话框中点击“OK”。
注意 SQL Mobile数据库可以使用在台式电脑和Windows Mobile的设备上,这两种平台的区别在于一种是便携版本,Visual Studio 2005支持在两种平台上的连接和管理数据库。
10. 在“Choose your data connection”页面点击“Next”如图7所示。
图7:选择数据连接
11. 在弹出的“Microsoft Visual Studio”对话框中点击“Yes”。
12. 点击Yes 完成Visual Studio的数据库部分,在项目部署时数据库自动拷贝到设备上,此时出现Data Source Configuration Wizard。
13. 在“Data Source Configuration Wizard”页面展开“Tables”选择“Inventory”如图8所示。
图8:选择数据库对象
14. 点击 “Finish”。
在“Solution Explorer”中将会看到“OrdersDataSet.xsd”和它所包含的文件如图9所示。
图9:OrdersDataSet.xsd文件的结构
按照下列步骤,创建一个新的表单,挨个浏览可用的产品,您将在表单上放置控件来显示数据字段。公司使用手机应用程序进行艺术品的销售,这个平台用来展示每个产品的图片。
创建数据浏览窗体
1. 在“Solution Explorer”中鼠标右键点击“Form1.cs”选择“Delete”。
2. 在弹出的确认提示框中选择“OK”。
3. 在“OrderManager”项目标题上点击鼠标右键选择“Add”、“Windows Form”。
4. 在“Add New Item”对话框中在“Name”栏中输入“ProductForm.cs”点击“”按钮如图10所示。
图10:添加ProductForm.cs
在设计视图中将看到智能手机的图像如图11所示:
图11:加载ProductForm窗体的Smartphone
5. 在“Solution Explorer”中双击“Program.cs”文件。
6. 因为我们已经把“Form1”删除了所以需要更改一下“Main”方法中的代码,把“Application.Run(new Form1());”修改为“Application.Run(new ProductForm());”。
7. 修改完的“Main”方法应该像下面的代码这样:
static void Main()
{
Application.Run(new ProductForm());
}
8. 保存并关闭“Program.cs”文件。
9. 点击“Visual Studio”菜单栏上的“Data”选择“Show Data Sources”将会出现“Data Sources”面板。
10. 在“Data Sources”面板中展开“OrdersDataSet”再展开“Inventory”如图12所示。
图12:数据源面板
11. 点击“Inventory”将会出现下拉列表选取里面的“Details”如图13所示:
图 13:目录详细信息
12. 列出来的选项指示出用什么类型的数据绑定控件来建立表单,点击Details,每个数据列会被单独显示,并用标签和文本框分隔开来。
图 14:单独的数据库列
现在您可以指出当绑定到详细目录列表时会用何种控件,请准备往表单上拖放控件。
13. 拖动“Inventory”到“ProductForm”窗体上。
图15:包含四个表格列的窗体
图16. 组件托盘
ordersDataSet组件存储来自数据库表的数据,inventoryBindingSource组件管理表单控件和OrdersDataSet数据集之单的数据绑定,inventoryTableAdapter组件处理数据库与数据集OrdersDataSet之间的数据流动。
正如您在设计视图的表单中所看见的,由于位置很小,所以要求每一个控件的摆放都经过慎重的考虑,常见的腾出位置的办法是去掉象Description之类的Label。
14. 鼠标右键点击“Description”标签选择“Delete”。
15. 鼠标右键点击“Description”文本框选择“Properties”把“location”中的值改为62,3把“size”的值改为96,22,如图17所示。
注意 可以手动地设置文本框的大小和位置,更精确的办法是在属性面板中设置其Location和 Size属性。
图17:调整Description文本框的大小和位置
16. 鼠标右键点击“Item Number”标签选择“Delete”。
17. 鼠标右键点击“Item Number”输入框选择“Properties”把“location”的值改为3,3把“size”的值改为51,22如图18所示。
图18:调整Item Number文本框的大小和位置
18. 同上面的步骤一样把“Price”标签的“location”值改为8,28把“size”的值改为30,15。
19. 同上面的步骤一样把“Price”文本框的“location”值改为62.26把“size”的值改为96,22。
20. 按照上面相同的方法删除“Image Filename”标签和“imageFilenameTextBox”文本框。
21. 点击“Visual Studio”菜单栏上的“View”选择“Toolbox”。
22. 把“PictureBox”控件用鼠标拖拽到窗体上。
23. 设置“PictureBox”控件的“location”的值为20,49“size”的值为122,122。
24. 在“Properties”面板上把“PictureBox”控件的“Name”值改为“imagePictureBox”如图19所示:
图19:改变名称属性
图20:修订后的ProductForm窗体布局
在下面的步骤中,您将为表单添加命令,这些命令包括滚动到下一项目和关闭应用程序
为窗体添加菜单
1. 在设计视图中鼠标点击菜单区域(窗体下的浅蓝色区域)如图21所示:
图21:选择左软键的菜单
注意 另一个设置菜单热键的方法是展开属性面板顶部的列表,选择mainMenu1
2. 点击左侧的区域在输入框中输入“Next”后按回车键。
如图22所示。
图22:标有Type Here文本的右软键
3. 点击右侧的区域在输入框中输入“Menu”后按回车如图23所示:
图23:菜单上的第一个命令
4. 点击图23所示的“Type Here”处输入“Exit”后按回车键如图24所示:
图24:ProductForm窗体菜单命令
5. 鼠标右键点击“Next”在弹出的菜单中点击“Properties”。
6. 把“Name”的值改为“menuNext”。
7. 点击“Menu”在弹出的菜单中鼠标右键点击“Exit”选择“Properties”。
8. 在“Properties”面板把“Name”的值改为“menuExit”。
添加数据浏览功能
1. 在窗体的设计视图中双击“Next”标签,“Virual Studio”将会自动创建“Next”按钮的menuNext_Click方法如图25所示:
图25:在ProductForm.cs代码中的 menuNext_Click 方法
2. 为了使“Inventory”标签中的数据滚动显示需要将inventoryBindingSource的Position属性增加1添加下列代码到menuNext_Click方法中
inventoryBindingSource.Position += 1;
3. 请确认“menuNext_Click”方法和下列代码一致。
private void menuNext_Click(object sender, EventArgs e)
{
inventoryBindingSource.Position += 1;
}
4. 我们还要完善一下代码当数据到达最后一条要让数据自动回到第一条循环滚动。把步骤3中的代码改为和下面的代码一致。
inventoryBindingSource.Position = (inventoryBindingSource.Position + 1) % inventoryBindingSource.Count;
5. 请确认“menuNext_Click”方法和下列代码一致。
private void menuNext_Click(object sender, EventArgs e)
{
inventoryBindingSource.Position = (inventoryBindingSource.Position + 1) % inventoryBindingSource.Count;
}
在滚动时详情列表依次显示数据,并自动更新下一项数据。
下一个步骤是在PictureBox控件中显示适当的图片,装载和显示图片也是绑定过程的一部分,但是由于必须为每个图片建立一个单独的位图,这需要一些额外的步骤。
6. 打开ProductForm.cs的设计视图。
7. 在窗体下面的托盘中找到“inventoryBindingSource”如图26所示:
图26:组件托盘
8. 双击“inventoryBindingSource”,“Virusl Studio”将会自动创建inventoryBindingSource_CurrentChanged方法。
此方法在每次数据记录改变的时候被调用。在本应用中,该方法在ProductForm 第一次显示时和每次inventoryBindingSource Position 属性被修改时被调用。
9. 在修改inventoryBindingSource_CurrentChanged 代码前, 定义一个类级别(在类定义内,但是在所有方法之外)的Bitmap类型的变量_imageBitmap。 在类的任何位置定义都可以,一个比较好的位置是inventoryBindingSource_CurrentChanged 方法后。
Bitmap _imageBitmap;
现在我们可以给inventoryBindingSource _CurrentChanged 方法添加代码了。 inventoryBindingSource 涉及了一个 DataRowView 的引用,在Current 属性中存储了当前显示的数据行。
10. 在inventoryBindingSource _CurrentChanged 方法的开头定义一个DataRowView 类型的变量rowView 。将 inventoryBindingSource 的Current 属性的值赋给该变量。 Current 属性是Object,所以您需要进行显式的类型转换。
DataRowView rowView = (DataRowView) inventoryBindingSource.Current;
11. rowView 的Row 保存了当前显示的 Inventory DataTable 中的数据行。声明一个 OrdersDataSet.InventoryRow 类型的变量 row 并将 rowView.Row的值赋给它。您需要显式的转换 rowView.Row 返回的数据类型。
OrdersDataSet.InventoryRow row = (OrdersDataSet.InventoryRow) rowView.Row;
如果您之前没有操作DataSet的经验,也许并不熟悉OrdersDataSet.InventoryRow 这样的对象。 这样的类型名称意味着 InventoryRow 是一个嵌套类型,InventoryRow 类的定义是在OrdersDataSet 类的内部的。虽然嵌套类并不经常被使用,但是像DataSet这样的情况,嵌套类将很好的解决命名空间冲突问题。
12. 需要显示的图片被保存在Inventory DataTable 的ImageFileName 列中,我们通过row ImageFilename 属性来访问。要显示图片,您必须先通过图片文件创建一个Bitmap 类。为了达到这个目的,需要创建一个新的Bitmap 实例并将文件名作为构造函数参数。将该Bitmap 赋给我们之前声明的 _imageBitmap 变量。
_imageBitmap = new Bitmap(row.ImageFilename);
13. 现在 Bitmap 类已经创建好了。将 _imageBitmap 赋给 imagePictureBox.Image 来显示图片。
imagePictureBox.Image = _imageBitmap;
您现在已经完成了显示产品图片的必要步骤。最后要注意的一点是: Bitmap 类实现了IDisposable 接口,这表示我们在使用完Bitmap 类之后需要调用 Bitmap Dispose 方法释放相应资源,否则将造成资源漏洞。比较好的做法是在创建下一个实例之前调用该方法。
14. 在 inventoryBindingSource _CurrentChanged 方法的开头,添加 IF 语句判断 _imageBitmap 是否不为空。
if (_imageBitmap != null)
{
}
15. 在IF判断中调用 _imageBitmap Dispose 方法。
_imageBitmap.Dispose();
16. 完成后的 inventoryBindingSource _CurrentChanged 方法和 _imageBitmap 声明看起来应该像下面这样:
void inventoryBindingSource_CurrentChanged(object sender, EventArgs e)
{
if (_imageBitmap != null)
{
_imageBitmap.Dispose();
}
DataRowView rowView = (DataRowView)inventoryBindingSource.Current;
OrdersDataSet.InventoryRow row =
(OrdersDataSet.InventoryRow) rowView.Row;
_imageBitmap = new Bitmap(row.ImageFilename);
imagePictureBox.Image = _imageBitmap;
}
Bitmap _imageBitmap;
现在您已经准备好了为ProductForm菜单添加一个Exit事件,正如预期的,Exit用来关闭表单同时关闭应用程序。
为“Exit”菜单添加实现功能的方法
1. 打开窗体设计视图。
2. 点击“Menu”菜单双击“Exit”按钮“Virual Studio”将为“Exit”按钮自动创建“menuExit_Click”事件方法。
3. 在“menuExit_Click”方法中使用窗体的“Close”方法实现点击“Exit”按钮应用程序退出的效果,代码如下:
Close();
4. 请确认添加完“Close”方法的“menuExit_Click”方法和下面的事例代码一致。
private void menuExit_Click(object sender, EventArgs e)
{
Close();
}
现在可以测试一下您的应用程序了。
测试您的应用程序
1. 在“Visual Studio”菜单栏上点击“Bulid”选择“Build Solution”。
2. 点击“Debug”选择“Start Without Debugging”。
3. 在弹出的“Deploy Order Manager”对话框中选择“Windows Mobile 5.0 Smartphone Emulator”如图27:
图27:部署OrderManager 对话框
.cab安装文件将部署在模拟设备上,这个过程会进行3分钟,应用程序准备完毕时显示在模拟器上,如图28:
图28:正在运行程序的模拟器
注意:假如出现图29所显示的情况,点击NO。您需要退出这个版本的应用程序。
图29:部署错误对话框
4. 当表单启动,点击Next命令下面的软键向下滚动几项,注意如果您浏览到目录结尾,应用程序自动回滚到第一项 (一共有十二个照片)。
5. 当感觉应用程序运行顺利,点击Menu指令之下的按钮, 然后使用模拟器的方向键和执行键(在方向键中间)来选择Exit命令。
注意 您也可以使用每个命令文本边上显示的相关的数字键,使用一个模拟器时,您也能可以直接用鼠标按指令。