关于昨天的DataGridView我觉得有必要补充一下。

  首先,我们发现DataGridView上的项(即行DataGridViewRow)有一个DataBoundItem属性(参见http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridviewrow.databounditem(VS.80).aspx),可以帮助我们拿到绑定到当前行的对象(记住,只读的)。

  当然,拿到的是一个object类型,您将其转化为需要的类型(即其本来的类型) 就可以拿到该对象的数据进行操作了。

  比如上一次我们说到:将保存有若干员工信息的集合直接或使用泛型类BindingList绑定到DataGridView上,我们可以在运行时通过DataGridView上DataGridViewRow的DataBoundItem属性拿到该行对应的对象。

  比如下面代码:

1 // 定义数据源2 // List<?> list = new List<?>();3 4 // 绑定数据源5 // dataGridView1.DataSource = new BindingList<?>(list);6 7 // 在运行时拿到8 // ? obj_name = dataGridView1.Rows[i].DataBoundItem as ?;

  道理很简单,数据源的绑定过程中会执行将对象的属性值分配到列显示,并将项的DataBoundItem属性引用到该对象。

  那么可能会有举一反三的朋友会想:如果我把数据库表或者数据视图作为数据源绑定呢?

  大家应该相信:解决的办法肯定是有的,首先,不管绑定的数据类型是什么,具体到每一行上,肯定是一个对象,通过该对象的属性和方法。我们就能求解问题。

  首先,我们通过实验获得当绑定DataView作为数据源时每一行绑定到的对象类型。

  我们可以编写如下代码:

 1        // 在一个初始化的事件或方法中完成 2  3        // 取得数据 4             SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=db_MySchool;User ID=sa;Password=12345"); 5             SqlDataAdapter adapter = new SqlDataAdapter("select * from tb_Student", con); 6             DataSet ds = new DataSet(); 7             adapter.Fill(ds); 8  9             // 绑定数据10             dataGridView1.DataSource = ds.Tables[0].DefaultView;

  在另一个事件或方法(界面呈现时的)中使用消息框或者通过断点调试中查看具体类型,结果我们得到此时DataGridView的每一行绑定的对象类型为System.Data.DataViewRow,从字面上理解就是数据列的视图。

  于是,事情变得简单了。我们还是利用DataBoundItem属性将对象拿到,只不过将对象类型改为它真正的类型就可以了嘛。

  具体实现如下:

 1      // 窗体加载 2         private void Form1_Load(object sender, EventArgs e) 3         { 4             // 取得数据 5             SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=db_MySchool;User ID=sa;Password=12345"); 6             SqlDataAdapter adapter = new SqlDataAdapter("select * from tb_Student", con); 7             DataSet ds = new DataSet(); 8             adapter.Fill(ds); 9 10             // 绑定数据11             dataGridView1.DataSource = ds.Tables[0].DefaultView;12         }13 14         // DataGridView.RowsAdded事件15         private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)16         {17             for (int i = e.RowIndex; i < e.RowIndex + e.RowCount; i++)18             {19                 // 拿到对象20                 DataRowView drv = dataGridView1.Rows[i].DataBoundItem as DataRowView;21             }22         }

  拿到对象了,实际上如果我们没有使用过也没什么大不了,文档可以查,引擎可以搜,大不了我一个个属性和方法试……

  当然,我在这里就直接将如何使用以上取得对象的方法做简单的描述:

 1            // 拿到对象 2            // 如果您是将DataTable作为数据源而非DataView,拿到的对象类型就是应为DataRow 3                 DataRowView drv = dataGridView1.Rows[i].DataBoundItem as DataRowView; 4  5                 // 首先通过列的视图拿到列 6           // 如果您是将DataTable作为数据源而非DataView,您可以省略此步骤 7                 DataRow row = drv.Row; 8  9                 // 然后通过列的Field方法拿到具体的需要的字段(相对于数据库表结构)或者说列的具体内容10          // 该方法重载很多中,且支持泛型,十分强大11           // 比如,我们使用通过字段名(或列名)返回代表该列内容的字符串的重载版本12                 string stuName = row.Field<string>("StudentName");

  更多内容参见http://msdn.microsoft.com/zh-cn/library/system.data.datarow.field(VS.90).aspx(DataRow.Field 方法)。

转载于:https://www.cnblogs.com/Johness/archive/2012/03/31/2427658.html

WinForm编程数据视图之DataGridView浅析(续)相关推荐

  1. WinForm编程数据视图之DataGridView浅析

    学习C#语言的朋友们肯定或多或少地接触到了WinForm编程,在C#语言的可视化IDE中(如VS.NET中)使用设计器可以让我们轻松地完成窗体.按钮.标签.图片框等等控件的组合,我们可以轻易地做出界面 ...

  2. DataView数据视图的使用 winform

    DataView数据视图的使用 winform 实例化一个DataView对象 从Dv对象中过滤数据

  3. C# Winform编程自学笔记(一)

    内容简介 因为毕业设计要用到,所以计划用一个月的时间自学Winform编程 (2020/3/20-2020/4/17),以下是我的自学笔记,需要的朋友们请自提: 使用教材:<C#Winform实 ...

  4. WinForm编程细节

    原作者:黄启清(www.cnblogs.com/happyqq) 日期:2008-4-19 这是我在Cnblogs里面的第一篇原创文章,以前在百度贴吧里面写的都是网络安全方面的文章. 希望Cnblog ...

  5. c#winform演练 ktv项目 在dataGridView中显示歌曲列表

    c#winform演练 ktv项目 在dataGridView中显示歌曲列表 dgv控件绑定泛型数组 dgv对象.DataSource = 数据源 关于数据源,它可以是: 数据集中的某个表 泛型对象数 ...

  6. winform窗体数据的添加 1217

    winform窗体数据的添加 1217 >关于组合框控件 comboBox(cb对象) 组合框对象 动态添加数据 组合框对象.Items.Add(内容) 组合框对象 断开式添加数据 组合框对象. ...

  7. 程序员编程艺术:第三章续、Top K算法问题的实现

    程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha.     致谢:微软100题实现组,狂想曲创作组.     时间:2011年05月08日    ...

  8. 可编程数据平面(论文阅读)

    可编程数据平面 原文 <A Survey on the Programmable Data Plane: Abstractions, Architectures, and Open Proble ...

  9. 【P4论文分享】基于P4的可编程数据平面研究及其应用

    前言 本文是本人学习的笔记,如有错误欢迎指正. 论文下载地址:基于P4的可编程数据平面研究及其应用 本文目录 前言 1 引 言 传统交换机的局限性 如何增强网络开放性? OpenFlow局限性 解决O ...

最新文章

  1. Matlab与线性代数 -- 矩阵的连接
  2. 机器学习拓展知识(数学/统计/算法)
  3. HR一般不会告诉你的八大真相
  4. 常见的容错机制+failover+failback
  5. 【新番前线】2009年公开剧场版动画汇总
  6. 有理贝塞尔曲线(Rational Bezier Curves)
  7. C++11新特性以及std::thread多线程编程
  8. java正则表达式 ppt_Java正则表达式演示
  9. 错误Read timed out.
  10. Pycharm 中py文件编译成exe文件出现的问题和一个问题解决
  11. 在.NET中使用Speex -- 音频数据编解码
  12. java 二叉树的各种遍历
  13. CassiniDev源码学习 - 可替代IIS的单机Web Form解决方案
  14. 科大讯飞 asr 实时语音转写 rtasr 基于Netty编写的websocket client SDK
  15. 硬盘IDE模式与AHCI模式的区别
  16. 小象学院—小象学院—Python学习联盟09—空气质量指数计算
  17. react-navigation goBack()传值
  18. [原创]简易文本编辑器( 无界面)
  19. 这位.NET开发者曾说:“GitHub 存在的意义,是帮助开发人员”,但还是要离职了...
  20. 要问热风帆布鞋质量怎么样?实穿、耐磨、脚感好,闭眼入!

热门文章

  1. 池化方法总结(Pooling)
  2. Visual Studio 2017最新版正式发布!适用于任何开发人员、平台及APP丨附下载
  3. ajax和jsonp没有半点关系,跨域问题
  4. 第三十章 elk(1) - 第一种架构(最简架构)
  5. Hadoop 2.X 从入门到精通系列视频课程套餐
  6. Android — 使用 SharedPreferences 本地保存 key-value 数据
  7. 地图与定位之大头针视图
  8. Access数据库如何批量操作呀 ?
  9. ***帮兄设计实战分析
  10. Android 高级进阶之overdraw分析及解决