C#Winform中DataGridView控件根据鼠标左右键获取单元格值或者行列

有多种方法可以获取单元格的值或者行列,此处选用了两种方式去获取分别用了CurrentCell方法和Rows[].Cells[]的方法去获取行列值

鼠标左键获取单独行列值

  • 此处获取左键行列值的触发条件是表格中数据变化获取,对应DataGridView事件CellValueChanged。
  • 用方法CurrentCell中的Value,RowIndex,ColumnIndex,分别对应了鼠标左键单元格选中的值,行,列。e.RowIndex>=0的判断要加上不加上容易报错。
private void dgvSRE_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            object value = null;
            int ri = 0;
            int ci = 0;
            if (e.RowIndex >= 0)
            {
                value = dgvSRE.CurrentCell.Value;
                ri = dgvSRE.CurrentCell.RowIndex;
                ci = dgvSRE.CurrentCell.ColumnIndex;
            }
           
        }

鼠标右键获取行

  • 此处获取右键行的触发条件是根据鼠标是否按下获取,对应DataGridView事件CellMouseDown。
  • 用Rows[].Cells[]方法去获取值,第一个判断是判断是判断是否由鼠标右键完成选取工作
  • 方法Selected是判断选取行是否处于高亮状态不是的话,赋予高亮状态。
int cellRi = 0;
private void dgvSRE_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (e.RowIndex >= 0)
                {
                    if (dgvSRE.Rows[e.RowIndex].Selected == false)
                    {
                        dgvSRE.ClearSelection();
                        dgvSRE.Rows[e.RowIndex].Selected = true;
                    }
                    cellRi = dgvSRE.Rows[e.RowIndex].Index;
                }
            }
        }

鼠标右键获取行列值

  • 触发事件同上,一般情况下右键的时候选取的表格不会高亮所有需要判断和赋予高亮值才能方便观察,只需要在上面的基础上稍微更改就可以
 private void dgvSRE_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (e.RowIndex >= 0)
                {
                    /*if (dgvSRE.Rows[e.RowIndex].Selected == false)
                    {
                        dgvSRE.ClearSelection();
                        dgvSRE.Rows[e.RowIndex].Selected = true;
                    }*/
                    if(dgvSRE.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected == false)
                    {
                        dgvSRE.ClearSelection();
                        dgvSRE.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected = true;
                    }
                    var cellRi = dgvSRE.Rows[e.RowIndex].Cells[e.ColumnIndex];
                    object val = dgvSRE.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                }
            }
        }

注意事项

  1. CurrentCell方法不是每个事件都可以使用有些事件该方法不能很好的获取到你想要的行列值这点要注意,所以推荐一般使用Rows[].Cells[]的方法去获取行列值。
  2. 注意存储行列时变量的范围,建议使用var或者object获取在根据个人需求进行转换
  3. 最后提醒一些判断也是需要的不然容易未获取到值而报错,或者鼠标左右键未判断而跑进来。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值