我有以下DataGridView
前两列是DataGridViewImageCell
。
我想知道的是,我希望用户能够点击第一个单元格(带加号)并运行它的点击方法,但不能更改当前选定的行。
如果点击第二列,没有点击事件没有选择更改,我就不希望发生任何事情。
目前,我刚刚点击了CellContentClick
点击事件。
private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
DataGridViewEx dgvGeometryAudit = (DataGridViewEx)sender;
//Test for first column name IMAGE_TOGGLE
if (dgvGeometryAudit.Columns[e.ColumnIndex].Name.Equals("IMAGE_TOGGLE", StringComparison.OrdinalIgnoreCase))
{
ASSET_HEADER ah = (ASSET_HEADER)dgvGeometryAudit.Rows[e.RowIndex].DataBoundItem;
ExpandRow(dgvGeometryAudit, ah, e.RowIndex);
}
}
catch (Exception ex)
{
MessageBox.Show("Exception: " + ex.Message);
this.Close();
}
}
有没有办法实现这个目标?
答案 0 :(得分:1)
创建全局变量private List<int> selectedRows = new List<int>()
,然后在cellClick
事件内使用:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex != 0 && e.ColumnIndex != 1)
{
if (dataGridView1.Rows[e.RowIndex].Selected == false)
{
dataGridView1.Rows[e.RowIndex].Selected = true;
selectedRows.Add(e.RowIndex);
}
else
{
dataGridView1.Rows[e.RowIndex].Selected = false;
selectedRows.Remove(e.RowIndex);
}
}
else
{
dataGridView1.ClearSelection();
//Do your job here for that column/row
foreach(int r in selectedRows)
{
dataGridView1.Rows[r].Selected = true;
}
}
}
答案 1 :(得分:0)
这是一个可以防止不必要的选择首先发生的解决方案。您可能希望将其更改为默认为正常选择模式..:
private void dataGridView1_CellMouseMove(object sender,
DataGridViewCellMouseEventArgs e)
{
dataGridView1.SelectionMode = e.ColumnIndex == yourImageColumIndex ?
DataGridViewSelectionMode.RowHeaderSelect :
DataGridViewSelectionMode.FullRowSelect; // or whatever you want
}