dataGridView控件内容的复制。

黑色系菜鸟一枚 2013-09-20 09:38:09
在不绑定数据,动态添加列和行的情况下。
这是我能想到的办法…

dataGridView2.Columns.Clear(); //复制前先清空
for (int i = 0; i < dataGridView1.Columns.Count; i++) //添加列 奇怪,明明添加的是dgv1列的Clone,却还要用as转换?
dataGridView2.Columns.Add(dataGridView1.Columns[i].Clone() as DataGridViewColumn);
for (int i = 0; i < dataGridView1.Rows.Count; i++) //添加行
dataGridView2.Rows.Add(dataGridView2.Rows[i].Clone());
//获取单元格的值
for (int rowscount = 0; rowscount < dataGridView1.Rows.Count; rowscount++)
{
for (int cellscount = 0; cellscount < dataGridView1.Rows[rowscount].Cells.Count; cellscount++)
dataGridView2.Rows[rowscount].Cells[cellscount].Value = dataGridView1.Rows[rowscount].Cells[cellscount].Value;
}


为什么要用Clone?因为转换成DataTable也好,直接添加也好,都会提示“添加的列已在dataGridView”空间中。
想要用=直接复制,结果只得到一个引用指向…
奇怪,为什么列和行能给Clone,整个Table就不能呢?
总感觉这方法不够优雅,不知道各位前辈们有没有更好的办法……
...全文
334 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 guwei4037 的回复:
按照3楼我给出的写法似乎还是比较复杂,带循环的,已经实现,我就不上代码了。 你可以考虑用2楼说的DataTable,DataTable操作很方便,处理完毕后直接给datagridview绑定即可。
还要带循环?我在5楼的方法也是先复制到数组,然后是直接添加,结果就悲剧了…… cao版说的那个用DataTable的方法不是要先转换成DataTable再复制吗…那不是也很麻烦
  • 打赏
  • 举报
回复
明白6楼意思了,一直纠结于dgv控件的整体复制以及怎么把数据转到DataTable中,其实添加数据的时候直接把数据添加到DataTable对象中再轮流绑定就好了……
全栈极简 2013-09-20
  • 打赏
  • 举报
回复
按照3楼我给出的写法似乎还是比较复杂,带循环的,已经实现,我就不上代码了。 你可以考虑用2楼说的DataTable,DataTable操作很方便,处理完毕后直接给datagridview绑定即可。
  • 打赏
  • 举报
回复
引用 3 楼 guwei4037 的回复:
refer:
DataGridViewRow[] dgvr = new DataGridViewRow[this.dataGridView1.Rows.Count];//初始化一个DataGridViewRow数组
this.dataGridView1.Rows.CopyTo(dgvr, 0);//将datagridview1的行数据从索引为0的列开始,复制到这个数组里


曾经我也用过这方法……结局是残酷的
不过不知道我这么用对不对。
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
http://msdn.microsoft.com/zh-cn/library/system.data.datatable.copy.aspx DataTable.Copy
这个是不是要先把dataGridView转换成 DataTable?
全栈极简 2013-09-20
  • 打赏
  • 举报
回复
refer:
DataGridViewRow[] dgvr = new DataGridViewRow[this.dataGridView1.Rows.Count];//初始化一个DataGridViewRow数组
            this.dataGridView1.Rows.CopyTo(dgvr, 0);//将datagridview1的行数据从索引为0的列开始,复制到这个数组里
  • 打赏
  • 举报
回复
临时敲的代码 添加行的地方 有点小错误。更改下

dataGridView2.Columns.Clear(); //复制前先清空
            for (int i = 0; i < dataGridView1.Columns.Count; i++) //添加列 奇怪,明明添加的是dgv1列的Clone,却还要用as转换?
                dataGridView2.Columns.Add(dataGridView1.Columns[i].Clone() as DataGridViewColumn);

            //获取单元格的值
            for (int rowscount = 0; rowscount < dataGridView1.Rows.Count; rowscount++)
            {
                dataGridView2.Rows.Add(); //添加行
                for (int cellscount = 0; cellscount < dataGridView1.Rows[rowscount].Cells.Count; cellscount++)
                    dataGridView2.Rows[rowscount].Cells[cellscount].Value = dataGridView1.Rows[rowscount].Cells[cellscount].Value;
            }
threenewbee 2013-09-20
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.data.datatable.copy.aspx DataTable.Copy

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧