DataGridView怎样实现添加、删除、上移、下移一行
程序员文章站
2022-07-05 11:06:53
场景 在Winform中使用DataGridView实现添加一行、删除一行、上移一行、下移一行。 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 添加一行 效果 删除一行 ......
场景
在winform中使用datagridview实现添加一行、删除一行、上移一行、下移一行。
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
添加一行
private void taskviewedithelper_onaddstep(object sender, eventargs e) { datagridviewrow dr = new datagridviewrow(); dr.createcells(this.datagridview_task_viewedit); dr.cells[0].value = "公众号" + this.datagridview_task_viewedit.rows.count; dr.cells[1].value = "霸道的程序猿"; dr.cells[2].value = "大量编程教程与资源"; //this.datagridview_task_viewedit.rows.insert(0, dr); //添加的行作为第一行 this.datagridview_task_viewedit.rows.add(dr);//添加的行作为最后一行 }
效果
删除一行
private void taskviewedithelper_onremovestep(object sender, eventargs e) { if (this.datagridview_task_viewedit.selectedrows == null || this.datagridview_task_viewedit.selectedrows.count == 0) { xtramessagebox.show("请先选择删除步,单击第一列以选中行"); } else { if (xtramessagebox.show("确定要删除选中步吗?") == system.windows.forms.dialogresult.ok) { foreach (datagridviewrow dr in this.datagridview_task_viewedit.selectedrows) { if (dr.isnewrow == false) { //如果不是已提交的行,默认情况下在添加一行数据成功后,datagridview为新建一行作为新数据的插入位置 this.datagridview_task_viewedit.rows.remove(dr); } } } } }
效果
上移一行
private void taskviewedithelper_onupstep(object sender, eventargs e) { if (this.datagridview_task_viewedit.selectedrows == null || this.datagridview_task_viewedit.selectedrows.count == 0) { xtramessagebox.show("请先选择一行,单击第一列以选中行"); } else { if (this.datagridview_task_viewedit.selectedrows[0].index <= 0) { xtramessagebox.show("此行已在顶端,不能再上移!"); } else { //注意:这里是非绑定数据情况的上移行 // 选择的行号 int selectedrowindex = getselectedrowindex(this.datagridview_task_viewedit); if (selectedrowindex >= 1) { // 拷贝选中的行 datagridviewrow newrow = datagridview_task_viewedit.rows[selectedrowindex]; // 删除选中的行 datagridview_task_viewedit.rows.remove(datagridview_task_viewedit.rows[selectedrowindex]); // 将拷贝的行,插入到选中的上一行位置 datagridview_task_viewedit.rows.insert(selectedrowindex - 1, newrow); datagridview_task_viewedit.clearselection(); // 选中最初选中的行 datagridview_task_viewedit.rows[selectedrowindex - 1].selected = true; } } } }
注:
这里是没绑定数据源情况下的上移一行,添加的一行时通过是上面新增的方法实现的。
此时datagridview的datasource是为空的。
其中用到获取选中行的方法:
private int getselectedrowindex(datagridview dgv) { if (dgv.rows.count == 0) { return 0; } foreach (datagridviewrow row in dgv.rows) { if (row.selected) { return row.index; } } return 0; }
效果
下移一行
private void taskviewedithelper_ondownstep(object sender, eventargs e) { if (this.datagridview_task_viewedit.selectedrows == null || this.datagridview_task_viewedit.selectedrows.count == 0) { xtramessagebox.show("请先选择一行,单击第一列以选中行"); } else { if (this.datagridview_task_viewedit.selectedrows[0].index >= this.datagridview_task_viewedit.rows.count - 1) { xtramessagebox.show("此行已在底端,不能再下移!"); } else { int selectedrowindex = getselectedrowindex(this.datagridview_task_viewedit); if (selectedrowindex < datagridview_task_viewedit.rows.count - 1) { // 拷贝选中的行 datagridviewrow newrow = datagridview_task_viewedit.rows[selectedrowindex]; // 删除选中的行 datagridview_task_viewedit.rows.remove(datagridview_task_viewedit.rows[selectedrowindex]); // 将拷贝的行,插入到选中的下一行位置 datagridview_task_viewedit.rows.insert(selectedrowindex + 1, newrow); datagridview_task_viewedit.clearselection(); // 选中最初选中的行 datagridview_task_viewedit.rows[selectedrowindex + 1].selected = true; } } } }
效果