我正在處理包含組合框列的數據網格,但編輯此組合框(通過簡單點擊它)有時會變得煩人,因爲必須至少點擊兩次以更改該字段的值。我想改變這種行爲,所以我認爲這很簡單:只需創建一個OnMouseOver事件來選擇鼠標懸停的組合框,但唯一可用的事件是Disposed。如何更改C#中DataGridViewComboBoxColumn的行爲?
有什麼方法可以改變這種行爲嗎?
我正在處理包含組合框列的數據網格,但編輯此組合框(通過簡單點擊它)有時會變得煩人,因爲必須至少點擊兩次以更改該字段的值。我想改變這種行爲,所以我認爲這很簡單:只需創建一個OnMouseOver事件來選擇鼠標懸停的組合框,但唯一可用的事件是Disposed。如何更改C#中DataGridViewComboBoxColumn的行爲?
有什麼方法可以改變這種行爲嗎?
我只是處理了同樣的問題,並通過將DataGridView.EditMode
設置爲EditOnEnter
來解決它。
如果你不喜歡你的所有其他列這種行爲,我發現this suggestion在CellEnter
事件將:
if (DataGridView1.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
{
((DataGridViewComboBoxEditingControl)DataGridView1.EditingControl).DroppedDown = true;
}
我還沒有嘗試過,但它看起來很有希望。在this question上討論了相同的技術。
在Winforms中,DataGridView上有一個CellMouseEnter事件(和一個用於非鼠標導航的CellEnter事件)。您可以使用它來設置選定的單元格。
你只得到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應該不重要。
這工作真的很好。 關於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;
}
}
您是在使用Web應用程序還是winapplication? – Student 2011-02-17 20:46:33