2011-02-17 38 views
2

我正在處理包含組合框列的數據網格,但編輯此組合框(通過簡單點擊它)有時會變得煩人,因爲必須至少點擊兩次以更改該字段的值。我想改變這種行爲,所以我認爲這很簡單:只需創建一個OnMouseOver事件來選擇鼠標懸停的組合框,但唯一可用的事件是Disposed。如何更改C#中DataGridViewComboBoxColumn的行爲?

有什麼方法可以改變這種行爲嗎?

+0

您是在使用Web應用程序還是winapplication? – Student 2011-02-17 20:46:33

回答

2

我只是處理了同樣的問題,並通過將DataGridView.EditMode設置爲EditOnEnter來解決它。

如果你不喜歡你的所有其他列這種行爲,我發現this suggestionCellEnter事件將:

if (DataGridView1.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn) 
{ 
    ((DataGridViewComboBoxEditingControl)DataGridView1.EditingControl).DroppedDown = true; 
} 

我還沒有嘗試過,但它看起來很有希望。在this question上討論了相同的技術。

0

在Winforms中,DataGridView上有一個CellMouseEnter事件(和一個用於非鼠標導航的CellEnter事件)。您可以使用它來設置選定的單元格。

0

你只得到Disposed事件(我認爲)的原因是因爲你試圖去太深。當我嘗試去dataGridView1.Columns [「Column1」]時,我只得到Disposed事件... ...

相反,如KeithS所述,您可以將CellMouseEnter事件分配給DataGridView。

從那裏,你可以做以下...

private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex==0 || e.ColumnIndex==2) 
    { 
     dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
     dataGridView1.BeginEdit(true); 
    } 
} 

這if語句是隻是爲了顯示如何限制此功能對某些列,如果你想要的。

if語句內的第一行設置當前單元格,第二行開始編輯過程。

這是一個通用的過程,應該可以處理任何類型的列,您可以將其扔入DataGridView。 DataGridView的EditMode應該不重要。

0

這工作真的很好。 關於datagridview的CellClick事件:

void datagridview1_CellClick(object sender, .Windows.Forms.DataGridViewCellEventArgs e){if (e.ColumnIndex > 0) 
     { 
      W1.dGVReports.CurrentCell = W1.dGVReports.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
      W1.dGVReports.BeginEdit(true); 
      (W1.dGVReports.EditingControl as System.Windows.Forms.DataGridViewComboBoxEditingControl).DroppedDown = true; 
     } 
    } 
相關問題