DataGridView中怎么样像Excel一样框选多个单元格

浩洁 2014-09-28 10:08:36
如题,
在网上找了好多都是选多行的,我想知道怎么在DataGridView随便哪个位置点选并摁住开始移动鼠标(移动有8个方向,好像要确认起始单元格和最终单元格)框选多个单元格,然后实现Delete删除功能
int x = eData.SelectedColumns.Count;
int y = eData.SelectedRows.Count;
为什么这样没有效果?
...全文
308 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
浩洁 2014-09-29
  • 打赏
  • 举报
回复
引用 7 楼 dianjixue1 的回复:
DataGridView 所有选中的单元格都是可以根据dataGridView1.SelectedCells知道的。 不知道楼主为什么要手动的去标定选中的行与列
之前不知道这个,现在知道了,谢谢
dianjixue1 2014-09-29
  • 打赏
  • 举报
回复
DataGridView 所有选中的单元格都是可以根据dataGridView1.SelectedCells知道的。 不知道楼主为什么要手动的去标定选中的行与列
dianjixue1 2014-09-29
  • 打赏
  • 举报
回复
有什么难度吗,还是我不理解楼主的意思,你要的是“框”,要有一个虚线框吗? 其实仅仅实现选中删除的功能,很简单啊,选中的颜色也可以修改。 把DataGridView的SelectionMode属性设置为CellSelect(别的有的好像也行,没仔细测) 用鼠标左键(支持Ctrl与Shift组合),选中单元格,点击一个按钮如“Delete”,也可以做右键菜单 foreach (DataGridViewCell item in dataGridView1.SelectedCells) { item.Value = null; }
浩洁 2014-09-29
  • 打赏
  • 举报
回复
有个毛病,不能在这个时候排序,不知道还有没有其他毛病
浩洁 2014-09-29
  • 打赏
  • 举报
回复
        private void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            try
            {
                this.toolStripStatusLabel7.Text = Convert.ToString(e.RowIndex + 1);
                this.toolStripStatusLabel9.Text = Convert.ToString(e.ColumnIndex + 1);
            }
            catch { }
        }

        private void dataGridView_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex + 1 < Int32.Parse(this.toolStripStatusLabel7.Text))
            {
                this.toolStripStatusLabel11.Text = this.toolStripStatusLabel7.Text;
                this.toolStripStatusLabel7.Text = Convert.ToString(e.RowIndex + 1);
            }
            else
            {
                this.toolStripStatusLabel11.Text = Convert.ToString(e.RowIndex + 1);
            }
            if (e.ColumnIndex + 1 < Int32.Parse(this.toolStripStatusLabel9.Text))
            {
                this.toolStripStatusLabel13.Text = this.toolStripStatusLabel9.Text;
                this.toolStripStatusLabel9.Text = Convert.ToString(e.ColumnIndex + 1);
            }
            else
            {
                this.toolStripStatusLabel13.Text = Convert.ToString(e.ColumnIndex + 1);
            }
        }
我变通了一下,通过状态栏来记录选择的范围,删除的时候就遍历一下这些范围的单元格就可以了
浩洁 2014-09-29
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
我只要清空它的值(value)就可以了,反正我也不设置格式,怎么记录鼠标按下与释放的位置?
PaulyJiang 2014-09-29
  • 打赏
  • 举报
回复
第三方 很多支持的
exception92 2014-09-29
  • 打赏
  • 举报
回复
只能说,这种功能很难,难点在于 按着Ctrl键 鼠标滑动时的选择单元格操作,还有最后的delete操作,最多是清空cell里的数据; 不妨寻找 第三方控件

110,502

社区成员

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

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

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