В проекте C# WinForms я заполняю DGV из DataTable
. Когда пользователь нажимает на ячейку одного из столбцов, мне нужно заполнить ComboBox
и открыть его одним щелчком мыши .
Однако CBO открывается только тогда, когда соответствующая ячейка теряет фокус (щелкните где-нибудь еще в форме), а затем возвращает фокус (снова щелкните в этой ячейке) - и только если нажата стрелка CBO вниз, а не если текст CBO щелкнут. Мне также нужно, чтобы CBO открывался при нажатии на текст CBO.
private void dgvCategories_Click(Object sender, DataGridViewCellEventArgs e)
{
try
{
// Prevent code from executing if user clicks on a cell that already has a CBO
if (e.ColumnIndex == 5 && !(dgvCategories.Rows[e.RowIndex].Cells[e.ColumnIndex].GetType().Name == "DataGridViewComboBoxCell"))
{
// Get fields to build New Value query
List<string> lsNewValuesResult = new List<string>();
string strCategory = dtCategories.Rows[e.RowIndex][1].ToString();
string strCompanyName = cboSelectCompany.Text;
string strQueryGetNewValuesValidationInfo = "SELECT validationdb, validationtable, validationfield, validationfield2, validationvalue2" +
" FROM masterfiles.categories" +
" WHERE category = @category";
// Pass validation info query to db and return list of New Values
db getListOfNewValues = new db();
lsNewValuesResult = getListOfNewValues.GetNewValuesList(strQueryGetNewValuesValidationInfo, strCategory, strCompanyName);
// Create CBO object
DataGridViewComboBoxCell cboNewValueList = new DataGridViewComboBoxCell();
//Populate the combobox with the list of New Values
foreach (string strListItem in lsNewValuesResult) cboNewValueList.Items.Add(strListItem);
// Bind the CBO to the DGV
dgvCategories[e.ColumnIndex, e.RowIndex] = cboNewValueList;
var editingControl = dgvCategories.EditingControl as DataGridViewComboBoxEditingControl;
if (editingControl != null) editingControl.DroppedDown = true;
}
}
catch (Exception ex)
{
Console.WriteLine("dgvCategories_Click Exception: " + ex.Message);
}
}
DataGridViewEditMode
установлен на EditOnEnter
, а DataGrieViewSelectionMode
установлен на CellSelect
.
. две строки в конце взяты из SO Вопрос: « DataGridViewComboBoxColumn - нужно дважды щелкнуть ячейку, чтобы отобразить поле со списком "
Я не уверен, что еще попробовать ...