有多种方法可以获取单元格的值或者行列,此处选用了两种方式去获取分别用了CurrentCell方法和Rows[].Cells[]的方法去获取行列值文章来源地址https://www.toymoban.com/news/detail-491569.html
鼠标左键获取单独行列值
- 此处获取左键行列值的触发条件是表格中数据变化获取,对应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;
}
}
}
注意事项
- CurrentCell方法不是每个事件都可以使用有些事件该方法不能很好的获取到你想要的行列值这点要注意,所以推荐一般使用Rows[].Cells[]的方法去获取行列值。
- 注意存储行列时变量的范围,建议使用var或者object获取在根据个人需求进行转换
- 最后提醒一些判断也是需要的不然容易未获取到值而报错,或者鼠标左右键未判断而跑进来。
文章来源:https://www.toymoban.com/news/detail-491569.html
到了这里,关于C#Winform中DataGridView控件根据鼠标左右键获取单元格值或者行列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!