C# DataGridView 自动给新增记录当前单元格赋值
C# DataGridView 自动给新增记录当前单元格赋值
写给百度知道某网友提的问题:如何将一个datagridview中选中的单元格值赋给另一个datagridview选中的单元格?
赋值操作是相当简单的:
但是有种情况下赋值会失败,假设当前记录是新增状态时赋值后移动焦点再移回来,单元格的值消失了,是因为新增的记录没有保存到数据源中,要处理这种情况必须手工新增记录追加到数据源中。
写给百度知道某网友提的问题:如何将一个datagridview中选中的单元格值赋给另一个datagridview选中的单元格?
赋值操作是相当简单的:
C# Code:
if (dataGridView1.SelectedCells.Count > 0)
{
if (dataGridView2.SelectedCells.Count > 0)
{
dataGridView2.SelectedCells[0].Value = dataGridView1.SelectedCells[0].Value;
}
}
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;
}
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
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
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网