datatable和datagridview传数据

在以前用datagridview的时候,就是把datagridview.dataSource= list,然后再来一下this.dgvInBogieInfo.Columns["ID"].HeaderText
= “张三”,这样就能实现显示一个列了,但是最近做项目的时候,一直在接触datagridview,所以对这个控件又有了许多新的用法,在这里总结一下。

1、显示

首先说一下显示,其实datagridview1的数据源可以有种,不止List<>集合,还有datatable,但是如果用DatagridView1有一点不好,那就是我们查询的时候简单了,但是在以后维护的时候难免会多几行代码。还有一点就是,我们用list的时候,我们一般是List<XXEntity>,也就是实体集合,可以说是一个不标准的面向对象,而Datatable,从table就可以看出,他是一个表,如果是实体,那么就是一个兑现,如果是数据库里的表,那就是和业务有关系的了。毕竟咱们设计表的时候总是会把一个业务的数据放到一起。

2、DataGridView之间的数据传输。

说一下我的业务,我要对某一个信息进行增删改查,例如我要将一些信息发给别人,那么我就需要在第一个页面上显示我要发送的消息,我们暂且称其为窗体A:

如上图所示,我要在选择添加按钮的时候,弹出一个窗体,然后里边有我需要的信息,如下图:窗体B:

但是现在我有一个要求,就是在这个里边的转向架信息,我们是只选择,但是我需要把datagridview中的信息和上边文本框中的信息传输给第一个窗体,这个怎么办呢,这就是我接下来要说的了。

首先思路是这个样子,我先把datagridview中的信息和上边文本框中的信息保存到datagridview中,然后让窗体A去获取B窗窗体中的DataTable。

大概就是A->DataTable<-B,定义一个全局变量,这样就可以实现datagridview的数据传输问题。代码如下:

窗体B中的代码:

 public static DataTable tempDT = null;              //添加一个新表,用来将选择的数据发到主界面的datagridview中

			//为临时的datatable(tempDT)创建新列
            tempDT.Columns.AddRange(new DataColumn[] {
                new DataColumn("S_BUREAUNUMNO",typeof(string)),
                new DataColumn("S_SERIALNUM",typeof(string)),
                new DataColumn("S_TRAINSETID",typeof(string)),
                new DataColumn("S_BOIGETYPE",typeof(string)),
                new DataColumn("S_BOIGESTATE",typeof(string)),
                new DataColumn("S_CURRMILE",typeof(string)),
                new DataColumn("S_OUTUNIT",typeof(string)),
                new DataColumn("S_INUNIT",typeof(string)),
                new DataColumn("S_REMARK",typeof(string)),
                new DataColumn("S_OUTDATE",typeof(string)),
                new DataColumn("S_EMPLOYEE",typeof(string)),
                new DataColumn("ID",typeof(int))

            });

   		//将datagridview中的数据保存到datatable中
            DataRow dr = null;
            foreach (DataGridViewRow item in this.DGVAddBogie.Rows)
            {
                dr = tempDT.NewRow();
                dr["S_BUREAUNUMNO"] = item.Cells["S_BUREAUNUMNO"].Value;
                dr["S_SERIALNUM"] = item.Cells["S_SERIALNUM"].Value;
                dr["S_TRAINSETID"] = item.Cells["S_TRAINSETID"].Value;
                dr["S_BOIGETYPE"] = item.Cells["S_BOIGETYPE"].Value;
                dr["S_BOIGESTATE"] = item.Cells["S_BOIGESTATE"].Value;
                dr["S_CURRMILE"] = item.Cells["S_CURRMILE"].Value;
                dr["S_REMARK"] = this.textBox1.Text;
                dr["S_OUTUNIT"] = OutUnit;
                dr["S_INUNIT"] = InUnit;
                dr["S_OUTDATE"] = AddDate;
                dr["S_EMPLOYEE"] = EmployeeName;
                dr["ID"] = item.Cells["ID"].Value;
                tempDT.Rows.Add(dr);
            }

窗体A的代码

DataTable dt = FrmB.tempDT;
This.DatagridView.DataSource = dt;

3、选中行:

选中行的问题我在这里再说一下,我们只需要在添加列的时候将ColumnType的属性设置成DataGridViewComboBoxColumn就可以了,然后运用的时候如下代码就可以:

/根据部产品标识码,产品序列号来修改接收状态
 for (int i = 0; i < dt.Rows.Count; i++)
 {
string ck = this.DGVOutBogie.Rows[i].Cells["Choice"].EditedFormattedValue.ToString();
      if (ck == "True")
      {
  			……(“自己的操纵就可以了”)
  }

当然传数据的做法也不是很好,因为有一个静态变量public
static DataTabletempDT =
null,也就是其他的窗体也都可以访问,但是毕竟涉及到类和类之间的数据传输,暂时还没有想到更好的办法,就用了这种办法,如果有什么其他方法,谢谢指正。

时间: 2024-10-09 16:47:02

datatable和datagridview传数据的相关文章

DataGridView修改数据并传到数据库

1. 两个属性设置: 第一个:设置自动创建列,默认为True DataGridView1. AutoGenerateColumns = True; 虽然默认为True,但写下去总是好的!!! 第二个:鼠标单击编辑,默认双击 DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; 2. 防止单元格被编辑: DataGridViewCell:限制单元格 DataGridViewColumn:限制列 DataGridViewRow:限制行 

DataGridView显示数据的两种方法

1.简单介绍 DataGridView空间是我们常用的显示数据的控件,它有极高的可配置性和可扩展性. 2.显示数据 DataGridView显示数据一般我们常用的有两种方法,一种是直接设置DataSoure属性就可以绑定数据.此方法不需要写任何代码操作比较简单,但是它显示出来的是整张表的数据.如果整一表数据比较多,而且我们并不需要所有的数据的情况下,我们就应该考虑第二种方法了.通过写代码连接数据库并从数据库中读取数据,最后将返回的数据传给DataGridView.这种方法貌似比较复杂,但是它只显

BindingNavigator操作DatagridView的数据

1.往窗体拉一个BindingNavigator:如图绿色框,就是一个数据导航栏 再拉一个DataGridView,显示数据,我添加了三列,对应要显示的三列数据 再拉一个BindingSource,作为上面两个的媒人 数据库数据如下: 代码如下: namespace gjjyOffline { public partial class fenye : Form { public fenye() { InitializeComponent(); } private void fenye_Load(

如何实现DataGridView刷新数据?

近期做项目,遇到一个问题,在DataGridView中查询数据,进行操作后,仍旧显示原来未更新数据库的数据列表,这种情况很容易让人误解是否已经更新了数据. 我解决这个问题,有两种方式: 1.重新生成新窗口 Check check = new Check(); this.Close(); check.Show(); Check 是我们装载列表的窗体. 2.设置一个按钮,点击它触发一个事件,让后将数据源滞空,重新加载数据源.重新发送请求数据库: MessageCheckdataGridView.Da

layer.js子窗口关闭并传数据到父窗的方法

昨晚整了很晚,一直找不到方法.去官网api看了好久,又在网上搜了很久 始终找不到答案.今天自己终于找到了方法. 难点:因为 确认和取消按钮都是在父窗 调用js生成的按钮.只能从父窗回调的时候去去数据并关闭子窗口.并不是子窗口自己关闭并把数据传到父窗.而网上给出的很多答案都是子窗口自己关闭并传数据到父窗的方法. [贴出我自己的代码,大概实现了流程.具体自己根据情况修改] 我的代码功能是 子窗口要传递数组给父窗,具体复杂的数据格式(如json等)类似 1.子窗口代码 var urls; functi

KETTLE:mongdb与mysql互传数据

注:部分内容引用了 http://blog.sina.com.cn/s/blog_4ac9f56e0101g881.html 1.mongodb传数据到mysql 1)在kettle中,mongodb input组件. 2)编辑组件 输入连接信息 选择数据库 写查询语句 选择字段.上面的复选框选择是否输入json格式,这时不选. 点击get fileds,获取字段对应关系. $代表根目录 .代表子目录 []代表数组中的值,例如: {"data" :{ "museum"

4.MVC框架开发(母版页的应用、按钮导致的Action处理、从界面向控制器传数据和HtmlHelper控件的实现(注册的实现))

1.在视图里如何引入母版页 1)在视图里母版页都是放在View目录下面的Shared文件夹下面 2)母版页里的RenderBody()类似于ASP.NET里面的ContentPalceHolder占位符,但是这个RenderBody()只能出现一次 3)@Url.Content是将虚拟路径转换为物理路径的方法 4)在母版页里如果需要别的占位,则就会需要:RenderSection("占位名字",bool值),在子页面就应该这样使用:@section  占位名字{  } 注:如果Rend

Ubuntu VMware虚拟机挂载移动设备传数据的小记录

原因 一般往 VMware  传数据,除了网络就是挂载移动设备. 网络搭建起来真心恶心,不过,我在比赛的时候,就是用网络,当时记得是xen搞得几个虚拟机,然后在物理机上用tomcat建立一个服务器,把东西放到里面去,在虚拟机里面访问下载.这种方式很不好,只能单方面传输,不过当时够用就行. 其实还是挂载方便. 本文主要是方便自己查阅.没啥新东西.老人勿喷. 数据传输操作讲解 本文VMware版本为7.0. 第一步:VMWare 菜单栏 -> VM -> Removable Devices 勾选你

如何实现后台向前台传数据

这两天正在研究如何让后天主动向前台展现数据,只要后台有数据上传的时候就向前台上传(因为公司有个项目,硬件设备会不断的上传数据,服务端将接收到的数据向前台展示).在网上查了一下,下面将介绍一下其中的两种解决办法 一.WebSocket WebSocket 是web客户端和服务器之间新的通讯方式, 依然架构在HTTP协议之上.使用WebSocket连接, web应用程序可以执行实时的交互, 而不是以前的poll方式. WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的