码迷,mamicode.com
首页 > Windows程序 > 详细

datatable和datagridview传数据

时间:2015-05-28 23:13:23      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:.net framework

        在以前用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,也就是其他的窗体也都可以访问,但是毕竟涉及到类和类之间的数据传输,暂时还没有想到更好的办法,就用了这种办法,如果有什么其他方法,谢谢指正。





datatable和datagridview传数据

标签:.net framework

原文地址:http://blog.csdn.net/lovemenghaibin/article/details/46136529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!