`
jinvasshole
  • 浏览: 763704 次
文章分类
社区版块
存档分类
最新评论

在Pocket PC应用程序中使用DataGrid控件

 
阅读更多

Pocket PC 应用程序中使用 DataGrid 控件

Christian Forsberg
businessanyplace.net

September 2003

Applies to:
Microsoft® .NET Compact Framework 1.0
Microsoft Visual Studio®.NET 2003

摘要: 学习如何在你的 Pocket PC 应用程序中如何有效地使用 DataGrid 控件进行数据查看和更新。这篇文章将解释,为什么这是重要的,并向你演示如何做。

Download datagrid_control.exe

Contents

Table Data
The DataGrid Control
DataGrid Sample
Code Walkthrough
Conclusion

Table Data

在实现企业级 Pocket PC 应用程序时,几乎总是需要以表格的方式浏览数据。大多数通用的方案是你输入许多查找标准,得到作为一个表的查找结果集,并从中搜索或选择。一个表格是一个非常直接的显示数据的途径,可以被你直接使用与屏幕空间中。

The DataGrid Control

包括在 Microsoft® Visual Studio® .NET 2003 中的 DataGrid 控件是一个强大的控件,使你能够以多种方式查看数据。这个控件可以被绑定到一个 DataTable,DataView,ArrayList 或者任何其他支持 IlistSource 或者 Ilist 接口的对象中。

让我们来看 DataGrid 控件是如何被用于一个 Pocket PC 应用程序实例的。

DataGrid Sample

这个 Pocket PC 的应用程序实例使用 Visual Studio .NET 2003, C#, Microsoft .NET Compact Framework 创建。它将演示如何使用 DataGrid 控件查看并更新数据。这个程序由一个 form 组成:

Figure 1. DataGrid sample

这个实例开始时载入订单表(一个来自 Northwind sample database 的原始订单表的子集)到一个 grid 中,然后使用多种 column style 来创建一个好看的界面。点击 column header 可以对每一个 column 进行排序,再点击排序后的 column header 可以在升序和降序间切换。

一个非常好的功能是 grid 中的每一个 cell 都是可编辑的。当一个 cell 被点击并获得输入焦点时, cell 中的值可以被更新(见图一)。当其他 cell 被选择时,被编辑过的 cell 被更新,新的 cell 变为可编辑。注意,当一个 cell 得到输入焦点,软键盘( SIP )是被自动激活(弹出)。一个可能的增进是例子可以拖动被选择的 cell 到可见,当它被 SIP 覆盖的时候。

现在,让我们看一下代码是如何实现的。

Code Walkthrough

在实例代码中, DataGrid 控件被命名为 grdOrders 。将订单表(被存成 XML 文件)加载到 DataGrid 控件,你只需要下面的代码:

DataSet ds = new DataSet();


ds.ReadXml(@"/Program Files/DGrid/orders.xml");


grdOrders.DataSource = ds.Tables[0];


事实上,如果你只做了这些,那么将得到一个非常简单的 grid ,每个 column header 上将会显示表字段的名字。为了让 grid 看上去更好,使用 table styles 。一个 table style 可以包含多种 table styles ——你想在 grid 中查看每个 column 。在这个例子中, columns 包括订购信息和收货人姓名。下面的代码设置状态:

DataGridTableStyle ts = new DataGridTableStyle();


ts.MappingName = "Order";





// Order date column style


DataGridColumnStyle orderDate = new DataGridTextBoxColumn();


orderDate.MappingName = "OrderDate";


orderDate.HeaderText = "Date";


ts.GridColumnStyles.Add(orderDate);





// Shipping name column style


DataGridColumnStyle shipName = new DataGridTextBoxColumn();


shipName.MappingName = "ShipName";


shipName.HeaderText = "Customer";


shipName.Width = this.Width - orderDate.Width - 37;


ts.GridColumnStyles.Add(shipName);





grdOrders.TableStyles.Add(ts);


每个 column style(DataGridColumnStyle) 设置一个表字段名称映射到 (MappingName property) header text 用于显示 (HeaderText property) ,并自定义 column 宽度 (Width property) 。两个 column styles 被加入到 table style 中,最后将 table style 加入到 DataGrid 控件 (grdOrders) 中。在这个例子里 styles 是被代码创建的,但是 styles 同样可以在 forms designer 中被创建。

当这个 grid 看上去很好时,有许多 common features grid 中可以被支持。编辑就是其中之一。但编辑在 DataGrid 控件中不是被自动支持的,这就需要手工实现。一种方法就是使用一个隐藏的 TextBox 控件,当一个 cell 被选中时显示,当编辑结束时隐藏。这就需要你声明一些变量:

private DataGridCell editCell;


private bool inEditMode = false;


private bool inUpdateMode = false;


我们需要获取哪个 cell 被编辑激活 (editCell) ,这个 cell 是否在编辑状态 (inEditMode) ,和我们是否正在更新一个 cell(inUpdateMode).

控制编辑代码如下:

private void grdOrders_CurrentCellChanged(object sender,


 
System.EventArgs e)


{


 
if (!inUpdateMode)


 
{


 
if (inEditMode && !grdOrders.CurrentCell.Equals(editCell))


 
{


 
// Update edited cell


 
inUpdateMode = true;


 
grdOrders.Visible = false;


 
DataGridCell currentCell = grdOrders.CurrentCell;


 
grdOrders[editCell.RowNumber, editCell.ColumnNumber] =


 
txtEdit.Text;


 
grdOrders.CurrentCell = currentCell;


 
grdOrders.Visible = true;


 
inUpdateMode = false;


 
txtEdit.Visible = false;


 
inEditMode = false;


 
}





 
// Enter edit mode


 
editCell = grdOrders.CurrentCell;


 
txtEdit.Text = (string)grdOrders[editCell.RowNumber,


 
editCell.ColumnNumber];


 
Rectangle cellPos = grdOrders.GetCellBounds(editCell.RowNumber,


 
editCell.ColumnNumber);


 
txtEdit.Left = cellPos.Left - 1;


 
txtEdit.Top = cellPos.Top + grdOrders.Top - 1;


 
txtEdit.Width = cellPos.Width + 2;


 
txtEdit.Height = cellPos.Height + 2;


 
txtEdit.Visible = true;


 
inEditMode = true;


 
}


}


当一个 cell 被点击( inEditMode inUpdate 被设置为 false )时,当前的 cell 被保存 (editCell) 。然后,隐藏的 TextBox(txtEdit) 得到当前 cell 的内容,重新设置到当前 cell 的位置,并使其可见 ( 在当前的 cell 上边 ) 。当编辑完成、其他 cell 被选择时,事件代码不可用 (inUpdateMode 设置成 true), 当被编辑的 cell TextBox 控件得到后,将新的 cell 保存 (currentCell) 。在 update 过程中, grid 没有被 update(Visible 设置成 false) ,当 update 完成 TextBox 被重新隐藏。

其他的 common grid feature 是通过点击 column header 进行排序。代码如下:

private void grdOrders_MouseUp(object sender,


 
System.Windows.Forms.MouseEventArgs e)


{


 
DataGrid.HitTestInfo hitTest = grdOrders.HitTest(e.X, e.Y);


 
if (hitTest.Type == DataGrid.HitTestType.ColumnHeader)


 
{


 
// Exit edit mode


 
txtEdit.Visible = false;


 
inEditMode = false;





 
// Sort tapped column


 
DataTable dataTable = (DataTable)grdOrders.DataSource;


 
DataView dataView = dataTable.DefaultView;


 
string columnName = dataTable.Columns[hitTest.Column].ColumnName;


 
if (dataView.Sort == columnName)


 
dataView.Sort = columnName + " DESC";


 
else


 
dataView.Sort = columnName;


 
}


}


如果 header 被点击,第一件事是确保任何当前 cell 的编辑被取消。然后一个 DataView 被创建并通过点击的 column 排序。如果一个 column 再次得到点击事件而排序顺序将被改成递减。后来的点击将使排序在递增和递减间切换,直到其他的 column 被点击。

Conclusion

DataGrid 控件是一个查看(然后是编辑)数据的强大工具,用于你的 Pocket PC 应用程序。这个控件提供多样性的 features ,而且这篇文章包含一些有趣的特性:数据绑定, grid 内编辑,排序。你的下一步是在这个例子上做一些深层次的开发,探索这个控件中更多更 cool 的窍门。

分享到:
评论

相关推荐

    2024职工群体户外交友拓展“躺进春天 趣野人生”活动策划方案ss.pptx

    2024职工群体户外交友拓展“躺进春天 趣野人生”活动策划方案ss.pptx

    pypy3.7-v7.3.4-osx64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    腾讯&阿里&携程面试题汇总(精华版).pdf

    腾讯&阿里&携程面试题汇总(精华版)

    pypy2-v6.0.0-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于C语言实现列车车厢重排问题(源码)

    列车车厢重排问题是经典的组合优化问题,也称为车厢调度问题或车厢排序问题。它的问题描述如下:有一列火车,列车由多节车厢组成,每个车厢上都有一个唯一的标识号。现在需要将这些车厢按照指定的顺序重新排列,使得满足一定的条件,例如车厢编号的升序或降序排列,或者满足某些车厢之间的关系等。

    报告-《新范式 新时代 新机会》dr.pptx

    报告-《新范式 新时代 新机会》dr.pptx

    xx集团数字化转型方案ss.pptx

    xx集团数字化转型方案ss.pptx

    pypy3.7-v7.3.3rc2-osx64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Qlik Sense Desktop 2024

    Qlik Sense Desktop 是一个 Windows 应用程序,让个人用户有机会使用 Qlik Sense 并通过多个数据源以简便的拖放操作创建个性化、交互式数据可视化、报告和仪表板。个人和内部业务使用时免费。 您可以创建自己可以重复使用的 Qlik Sense 应用程序,并且可以修改和与他人共享,而不需要部署和管理大量的商业应用程序。 Qlik Sense是一个强大的可视化BI报表开发平台,Qlik Sense Desktop是Windows桌面版的客户端,通常还有Enterprise HUB云端版。

    Java项目源码_ssm_高校学生选课系统项目源码.rar

    **Java项目源码_ssm_高校学生选课系统项目源码.rar** 本资源为一个基于Java技术栈的高校学生选课系统项目源码,采用了SSM(Spring、SpringMVC、MyBatis)框架进行开发。项目涵盖了学生选课、课程管理、教师管理、学生管理等功能模块,可以为高校教务管理提供有力支持。 项目结构清晰,模块化设计,便于二次开发和定制。主要包括以下几个模块: 1. 用户认证模块:包括用户登录、注册、权限验证等功能,支持多角色(学生、教师、管理员)登录和权限控制。 2. 学生选课模块:学生可以查看课程信息、选课、退课等操作,支持选课时间、人数限制等规则。 3. 课程管理模块:教师可以发布课程、编辑课程信息、上传课程资源等操作,支持课程分类、标签等功能。 4. 教师管理模块:管理员可以添加、编辑、删除教师信息,支持教师角色权限分配。 5. 学生管理模块:管理员可以添加、编辑、删除学生信息,支持学生角色权限分配。 6. 成绩管理模块:教师可以录入、编辑、查看学生成绩,支持成绩统计和导出功能。 7. 通知公告模块:管理员可以发布通知公告,支持公告分类、置顶等功能。 8. 系统设置模块:管理员可以配置系统参数、数据备份、日志查看等操作,保障系统稳定运行。 本项目源码可以为高校教务管理提供有力支持,同时也适用于企业内部培训、教育培训等场景。如有需要,可以根据实际需求进行二次开发和定制,以满足不同场景的需求。

    asp代码ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)

    asp代码ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)本资源系百度网盘分享地址

    pypy2.7-v7.3.6-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    星闪技术介绍.pptx

    星闪技术介绍

    《情绪管理指南》培训课件ld.pptx

    《情绪管理指南》培训课件ld.pptx

    毕业设计,前端,前端毕业设计

    毕业设计,前端,前端毕业设计

    课件-咨询IT规划方法dr.pptx

    课件-咨询IT规划方法dr.pptx

    非暴力沟通生命的语言lg.pptx

    非暴力沟通生命的语言lg.pptx

    nacos2.3.1改造适配postgresql配置文件

    nacos2.3.1改造适配postgresql配置文件,无需自己再去做数据库适配,导入数据库即可;

    高级网络人才培训专家-X00070003 第30章 配置PPP

    高级网络人才培训专家_X00070003 第30章 配置PPP

    C#的基础知识文档.doc

    C#的基础知识文档.doc

Global site tag (gtag.js) - Google Analytics