C# DataGridView 自动给新增记录当前单元格赋值
作者:C/S框架网  发布日期:2011/08/15 23:01:29
C# DataGridView 自动给新增记录当前单元格赋值


写给百度知道某网友提的问题:如何将一个datagridview中选中的单元格值赋给另一个datagridview选中的单元格?

赋值操作是相当简单的:


C# Code:

if (dataGridView1.SelectedCells.Count > 0)
{
   if (dataGridView2.SelectedCells.Count > 0)
   {
      dataGridView2.SelectedCells[0].Value = dataGridView1.SelectedCells[0].Value;
   }
}


但是有种情况下赋值会失败,假设当前记录是新增状态时赋值后移动焦点再移回来,单元格的值消失了,是因为新增的记录没有保存到数据源中,要处理这种情况必须手工新增记录追加到数据源中。


贴图图片



C# Code:

private void Form1_Load(object sender, EventArgs e)
{
   
   DataTable dt = new DataTable();
   dt.Columns.Add("Code", typeof(string));
   dt.Columns.Add("Name", typeof(string));
   dt.Rows.Add(new object[] { "V2.2", "C/S开发框架V2.2" });
   dt.Rows.Add(new object[] { "V3.0", "C/S开发框架V3.2" });
   dt.AcceptChanges();
   
   dataGridView1.DataSource = dt;
   
   DataTable dt2 = dt.Copy();
   dataGridView2.DataSource = dt2;
}







C# Code:

private void button1_Click(object sender, EventArgs e)
{
   //
   //程序说明:将表格2当前单元格的值赋给表格一当前单元格。
   //
   
   //两个表格都要选择单元格
   if ((dataGridView1.SelectedCells.Count > 0) && (dataGridView2.SelectedCells.Count > 0))
   {
      DataGridViewRow R = dataGridView1.SelectedCells[0].OwningRow;//当前行
      DataTable dt = (dataGridView1.DataSource as DataTable);//表格一的数据源
      
      //如R.IsNewRow属性=True,表示是自动新增的行,此时R.DataBoundItem==Null
      //DataBoundItem属性对应的是DataRow或者某个对象,这时不能够直接给空行赋值
      
      //如果表格处于新增状态,必须新增一条记录给源据源赋值。
      if (R.IsNewRow)
      {
         DataRow newRow = dt.Rows.Add();//增加一条新记录
         
         //将现有的数值赋值给DataRow
         foreach (DataGridViewCell cell in R.Cells)
         {
            newRow[cell.OwningColumn.DataPropertyName] = cell.Value;
         }
         
         int columnIndex = dataGridView1.SelectedCells[0].ColumnIndex;
         string FieldName = dataGridView1.Columns[columnIndex].DataPropertyName;
         
         //将表格2单元格的值赋给表格一中新增的记录
         newRow[FieldName] = dataGridView2.SelectedCells[0].Value;
         
         //重新定位行和列
         dataGridView1.CurrentCell = dataGridView1.CurrentCell = dataGridView1.Rows[dt.Rows.Count - 1].Cells[columnIndex];
         dataGridView1.CurrentCell.Selected = true;
      }
      else //非新增的记录,赋值相当简单
      {
         dataGridView1.SelectedCells[0].Value = dataGridView2.SelectedCells[0].Value;
      }
   }
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898




点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇