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

Windows CE 专栏收录该内容
41 篇文章 0 订阅

 

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 featuresgrid中可以被支持。编辑就是其中之一。但编辑在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被点击(inEditModeinUpdate被设置为false)时,当前的cell被保存(editCell)。然后,隐藏的TextBox(txtEdit)得到当前cell的内容,重新设置到当前cell的位置,并使其可见(在当前的cell上边)。当编辑完成、其他cell被选择时,事件代码不可用(inUpdateMode设置成true),当被编辑的cellTextBox控件得到后,将新的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的窍门。

  • 0
    点赞
  • 3
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426171105.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程目标</span></strong> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》从零开始,循序渐进地介绍了目前流行的网络爬虫框架Scrapy。即使你没有任何编程基础,学习起来也不会有压力,因为我们有针对性地介绍了Python编程技术。另外,《从零开始学Scrapy网络爬虫》在讲解过程以案例为导向,通过对案例的不断迭代、优化,让读者加深对知识的理解,并通过14个项目案例,提高学习者解决实际问题的能力。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">适合对象</span></strong> </p> <p style="font-size:16px;color:#666666;"> 爬虫初学者、爬虫爱好者、高校相关专业的学生、数据爬虫工程师。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <span style="font-size:20px;"><strong>课程介绍</strong></span> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》共13章。其,第1~4章为基础篇,介绍了Python基础、网络爬虫基础、Scrapy框架及基本的爬虫功能。第5~10章为进阶篇,介绍了如何将爬虫数据存储于MySQL、MongoDB和Redis数据库;如何实现异步AJAX数据的爬取;如何使用Selenium和Splash实现动态网站的爬取;如何实现模拟登录功能;如何突破反爬虫技术,以及如何实现文件和图片的下载。第11~13章为高级篇,介绍了使用Scrapy-Redis实现分布式爬虫;使用Scrapyd和Docker部署分布式爬虫;使用Gerapy管理分布式爬虫,并实现了一个抢票软件的综合项目。 </p> <p style="font-size:16px;color:#666666;"> <span style="color:#FF0000;">      由于目标网站可能会对页面进行改版或者升级反爬虫措施,如果发现视频的方法无法成功爬取数据,敬请按照页面实际情况修改XPath的路径表达式。视频教程主要提供理论、方法支撑。我们也会在第一时间更新源代码,谢谢!</span> </p> <p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426306665.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程特色</span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/202001311426415123.png" alt="" /> </p> <div> <br /> </div>
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
<p style="color:#333333;"> <strong> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#337FE5;">[为什么要学习Spring Cloud微服务]</span> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#4D555D;"></span> </strong> </p> <p class="ql-long-24357476" style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="font-family:"background-color:#FFFFFF;">SpringCloud作为主流微服务框架,<span style="color:#4D555D;">已成为各互联网公司的首选框架,国内外企业占有率持续攀升,</span>是Java工程师的必备技能。</span><span style="font-family:"background-color:#FFFFFF;">就连大名鼎鼎的阿里巴巴</span><span style="font-family:"background-color:#FFFFFF;">dubbo</span><span style="font-family:"background-color:#FFFFFF;">也正式更名为</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud Alibaba</span><span style="font-family:"background-color:#FFFFFF;">,成为了</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud </span><span style="font-family:"background-color:#FFFFFF;">微服务的一个子模块。</span><span style="font-family:"background-color:#FFFFFF;"></span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud是企业架构转型、个人能力提升、架构师进阶的不二选择。</span> </strong> </p> <p style="color:#333333;"> <strong><strong><br /> </strong> </strong> </p> <strong><span style="font-family:"color:#337FE5;font-size:14px;background-color:#FFFFFF;">【推荐你学习这门课的理由】</span><br /> </strong> <p> <br /> </p> <p> <span>1、</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">本课程总计</span><span style="background-color:#FFFFFF;">29</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">课时,<span style="color:#333333;">从微服务是什么、能够做什么开始讲起,绝对的零基础入门</span></span><span></span> </p> <p> <span style="background-color:#FFFFFF;">2、<span style="color:#333333;">课程附带全部26个项目源码,230页高清PDF正版课件</span><span style="color:#333333;"></span></span> </p> <p> <span style="background-color:#FFFFFF;"><b><br /> </b></span> </p> <p> <span style="background-color:#FFFFFF;"><b><span style="color:#337FE5;">【课程知识梳理】</span></b></span> </p> <p> <span style="background-color:#FFFFFF;"><b>1、</b></span><span style="color:#333333;">先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。</span> </p> <p> <span style="color:#333333;">2、</span><span style="color:#333333;">从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。</span> </p> <p style="color:#333333;"> 3、讲解Spring Boot 与Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。 </p> <p style="color:#333333;"> 4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册心服务Eureka。 </p> <p style="color:#333333;"> 5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。 </p> <p style="color:#333333;"> 6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码搞定服务的远程调用。 </p> <p style="color:#333333;"> 7、最后为大家介绍了整个微服务体系应该包含什么,学习路线是什么,应该学习什么。 </p> <p style="color:#333333;"> <strong><br /> </strong> </p> <p style="color:#333333;"> <strong><span style="color:#337FE5;">【</span><strong><span style="color:#337FE5;">学习方法</span></strong><span style="color:#337FE5;"></span><span style="color:#337FE5;">】</span></strong> </p> <p style="color:#333333;"> 每一节课程均有代码,最好的方式是静下心来,用一天的时间,或者两个半天时间来学习。 </p> <p style="color:#333333;"> 一边听我的讲解,一边使用我提供的项目代码进行观察和运行。 </p> <p style="color:#333333;"> 只要你能跟住我的节奏,你就可以搞定微服务。 </p> <br />
套餐一共包含5门程序员必学的数学课程(共47讲) 课程1:《零基础入门微积分》 课程2:《数理统计与概率论》 课程3:《代码学习线性代数》 课程4:《数据处理的最优化》 课程5:《马尔可夫随机过程》 哪些人适合学习这门课程? 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 在这门「专为程序员设计的数学课」系列课,我们保证你能收获到这些: ①价值300元编程课程大礼包 ②应用数学优化代码的实操方法 ③数学理论在编程实战的应用 ④程序员必学的5大数学知识 ⑤人工智能领域必修数学课 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初的数学知识就足矣。 如何听课? 1、CSDNapp:我的-我的内容库-我的课程 2、程序员学院app:我的-学习 3、pc端CSDN官网:https://edu.csdn.net/ 我的订阅-收费课 购课后如何领取免费赠送的编程大礼包? 购课后,添加助教微信: csdn590,按提示领取大礼包
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

aawolf

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值