在DataGridView中使用CellMouseDoubleClick并检测何时有人单击了标题

时间:2011-04-09 13:11:12

标签: c# winforms datagridview

在我的DataGridView控件中,我希望用户双击一行并获取相关信息。

这是我的代码:( 编辑

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.RowIndex != -1)
    {
        int studentID = Convert.ToInt32(dataGridView1[0, e.RowIndex].Value);
        StudentInformation addForm = new StudentInformation(studentID);
        addForm.ShowDialog();
    }            
}

问题是当有人双击标题时(我偶然发现了这个错误!)异常触发。当用户双击标题时,我不想处理任何内容。

如何检测标题何时被点击?

谢谢!

修改 似乎标头的RowIndex为-1。这是检查的最佳方法,还是这是一个肮脏的黑客?

3 个答案:

答案 0 :(得分:1)

检查datagridview.SelectedRows.Count> 0,当没有选择任何行时,这也会有所帮助

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.RowIndex >= 0 && dataGridView.SelectedRows.Count>0)
    {
        int studentID = Convert.ToInt32(dataGridView1[0, e.RowIndex].Value);
        StudentInformation addForm = new StudentInformation(studentID);
        addForm.ShowDialog();
    }            
}

答案 1 :(得分:1)

private void dgvDataGridView_DoubleClick(object sender, EventArgs e)
{
    if (sender != null && e != null && ((MouseEventArgs)e).Y <= ((DataGridView)sender).Rows[0].Height)
        return; //Double click on Header

答案 2 :(得分:0)

private void radgvAreaAdmin_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
      if (e.Row.Index <= -1)
           //Do your code inside in it.
}

e.rowindex可能会随您的注意力而变化。但是如果你使用e.row.index,当我们点击网格的列标题时它总是为-1。如果您想忽略标题中的双击,只需使用&#39; return&#39;在if条件之后。