2014-01-20 124 views
0

我有一個DataGridView鏈接到ContextMenuStrip。 DataGridView被填充。我選擇一行(任何單元格),當我右鍵單擊時,它會打開一個菜單,我可以在其中選擇編輯,重命名或刪除。我如何將選定行的行號傳遞給我的ContextMenuStrip? 所以我離開單擊選擇行號2中的單元格。我右鍵單擊DataGridView上的任意位置,然後選擇「重命名」。 我想要得到一條消息「你想重命名行號2」。這將是確定直接在行號2右鍵單擊並獲取消息(未首先選擇的行號2單元格)。這裏是我的代碼嘗試:DataGridView和右鍵單擊

void RenameToolStripMenuItemClick(object sender, EventArgs e) 
{ //this should rename the table 
    MessageBox.Show("This should rename the selected row number " + dataGridView1.SelectedRows.ToString()); 
} 
+0

這是在WPF或的WinForms? – TylerD87

回答

1

你需要看看RowIndex屬性爲DataGridView的CurrentCell屬性。像

void RenameToolStripMenuItemClick(object sender, EventArgs e) 
{ //this should rename the table 
    MessageBox.Show("This should rename the selected row number " + dataGridView1.CurrentCell.RowIndex); 
} 

但請記住的rowIndex計數一些東西是從0開始。

所以,一個行會顯示行數0,連續兩次將顯示行數1

要解決的rowIndex位置混亂,只需要添加一個1到的rowIndex像下面

void RenameToolStripMenuItemClick(object sender, EventArgs e) 
{ //this should rename the table 
    MessageBox.Show("This should rename the selected row number " + (dataGridView1.CurrentCell.RowIndex + 1)); 
} 
+0

你也可以使用dataGridView1.CurrentRow.Index,但這只是個人偏好。 – TylerD87

+0

謝謝SQL.NET戰士。我選擇你的答案作爲解決方案,因爲這對我的需求來說是最直接的。此外,謝謝TylerD87指出屬性CurrentRow。 –

0

在DataGridView中添加事件「的MouseDown」 在形式,創建一個水珠整數變量;

 try 
     { 
      if (e.Button == MouseButtons.Right) 
      { 
       dtg_contatos.ClearSelection(); 
       var hti = dtg_contatos.HitTest(e.X, e.Y); 
       dtg_contatos.Rows[hti.RowIndex].Selected = true; 
       selected_row = hti.RowIndex; 
      } 
     } 
     catch 
     { 
     } 

現在,在的ContextMenuStrip,加CLickEvent

 string verificacao = dtg_contatos.Rows[selected_row].Cells[0].Value.ToString(); 
     if (verificacao != "") 
     { 
      int codigo = int.Parse(dtg_contatos.Rows[selected_row].Cells[0].Value.ToString()); 
     } 

我應該在鱈魚上的第一個單元格,然後你得到你想要的東西的工作數據,一週時間該OU有鱈魚你可以做任何事情。

+0

謝謝迪特里希。你的代碼比Warrior更復雜,我選擇了更簡單的方法。 –

0

訂閱DataGridView.CellMouseDown事件。在事件處理程序中,顯示所需的上下文菜單。

示例代碼:

void myDGV_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      //get the rowindex or columnindex from the event argument and show the context menu. 
     } 
    }