C# DataGridView 自动给新增记录当前单元格赋值
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
参考文档:
GridView最后一列按回车键自动新增一条记录 从输入框跳转到明细表格并新增记录 C# GridView 自定义单元格的背景色 表格内按回车键自动移动下一列, 最后行最后列自动新增记录 数据字典BLL.CreateDataBinder方法实现新增记录给主键赋值 新增记录时自动生成记录的序号号码(或单据号码)并填充文本框 原创:C#源码 GridMovetor按回车自动跳到下一列或自动新增记录(www.csframework.com) C# Winform C/S架构自动升级软件 AutoUpgrader V1.2版本 C# DataGridView组件自动添加弹出菜单(ContextMenuStrip)复制单元格的值 C# TreeView组件TreeNode节点自动勾选解决方案(TreeViewNodeCheckHander) C#.NET给DataTable日期类型的列赋值报错:所需类型是 MySqlDateTime,值类型与列类型不匹配 修改单元格关联更新其它列的值,Dev GridView组件OnCellValueChanged事件实现 C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle) C#源码-OA网络办公自动化系统asp.NET-源码下载 C#源码-Accp自动化办公系统-源码下载
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |