28

我的 C# 应用程序中有一个 datagridview,用户应该只能单击整行。所以我将 SelectionMode 设置为 FullRowSelect。

但是现在我想要一个当用户双击一行时触发的事件。我想在 MessageBox 中有行号。

我尝试了以下方法:

 this.roomDataGridView.CellContentDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.roomDataGridView_CellCont‌ ​entDoubleClick); 

 private void roomDataGridView_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
 {
      MessageBox.Show(e.RowIndex.ToString());
 }

不幸的是,什么也没有发生。我究竟做错了什么?

4

7 回答 7

26

在 CellContentDoubleClick 事件仅在双击单元格内容时触发。我使用了这个并且有效:

    private void dgvUserList_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        MessageBox.Show(e.RowIndex.ToString());
    }
于 2013-04-12T12:19:15.553 回答
6

不要在 Visual Studio 中手动编辑 .designer 文件,这通常会让人头疼。而是在应包含在 DataGrid 元素中的 DataGridRow 的属性部分中指定它。或者,如果您只是想让 VS 为您执行此操作,请在属性页面-> 事件(小闪电图标)中找到双击事件,然后双击您将在其中输入该事件的函数名称的文本区域。

这个链接应该有帮助

http://msdn.microsoft.com/en-us/library/6w2tb12s(v=vs.90).aspx

于 2012-12-04T15:31:17.953 回答
5

以 Northwind 数据库员工表为例,您可以在 datagridview 中获取行的索引号:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'nORTHWNDDataSet.Employees' table. You can move, or remove it, as needed.
            this.employeesTableAdapter.Fill(this.nORTHWNDDataSet.Employees);

        }

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            var dataIndexNo = dataGridView1.Rows[e.RowIndex].Index.ToString();
            string cellValue = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();

            MessageBox.Show("The row index = " + dataIndexNo.ToString() + " and the row data in second column is: "
                + cellValue.ToString());
        }
    }
}

结果将显示记录的索引号和 datagridview 中第二个表列的内容:

在此处输入图像描述

于 2015-12-03T17:04:27.650 回答
4

这将起作用,请确保您的控件事件已分配给此代码,它可能已丢失,我还注意到只有当单元格不为空时,双击才会起作用。尝试双击有内容的单元格,不要惹设计师

 private void dgvReport_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
 {

   //do something


 }
于 2012-12-04T15:28:48.667 回答
1

我认为您正在寻找这个: RowHeaderMouseDoubleClick 事件

private void DgwModificar_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) {
...
}

获取行索引:

int indice = e.RowIndex

于 2019-08-28T18:25:24.470 回答
0

您可以通过以下方式执行此操作:CellDoubleClick事件这是代码。

private void datagridview1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        MessageBox.Show(e.RowIndex.ToString());
    }
于 2018-05-31T11:48:25.120 回答
0

出于您的目的,双击行标题时有一个默认事件。检查以下代码,

 private void dgvCustom_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
 {
      //Your code goes here
 }
于 2019-01-22T07:23:39.077 回答