2012-12-04 39 views
20

我在我的C#應用​​程序中有一個datagridview,用戶應該只能點擊完整的行。所以我將SelectionMode設置爲FullRowSelect。c#datagridview雙擊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()); 
} 

Unforunately沒有任何反應。我究竟做錯了什麼?

+1

你怎麼訂閱雙擊事件? –

+1

在設計器中,我編寫this.roomDataGridView.CellContentDoubleClick + = new System.Windows.Forms.DataGridViewCellEventHandler(this.roomDataGridView_CellContentDoubleClick); – Metalhead89

+0

我剛剛刪除了我的活動,並再次執行此操作,現在它可以正常工作。我真的不知道發生了什麼,但它現在起作用 – Metalhead89

回答

6

在Visual Studio中,通常會導致頭痛,不要手動編輯.designer文件。而是在DataGridRow的屬性部分中指定它應該包含在DataGrid元素中。或者,如果您只是想讓VS爲您找到屬性頁面中的雙擊事件(事件(小閃電圖標)),然後雙擊要輸入該事件的函數名稱的文本區域。

這個鏈接應該幫助

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

3

這將工作,確保您的控件事件分配給此代碼,它可能已經丟失,我也注意到,雙擊將只在單元格不爲空時才起作用。嘗試與內容的單元格雙擊,不惹設計師

private void dgvReport_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 

    //do something 


} 
11

在CellContentDoubleClick事件觸發僅當單元格的內容雙擊。我用這個和工作原理:

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

您使用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中第二個表列的內容:

enter image description here