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





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值