Ячейки в DataGridViewComboBoxColumn имеют ComboBoxStyle DropDownList. Это означает, что пользователь может выбирать значения только из раскрывающегося списка. Базовым элементом управления является ComboBox, поэтому он может иметь стиль DropDown. Как изменить стиль основного поля со списком в DataGridViewComboBoxColumn. Или, в более общем плане, могу ли я иметь столбец в DataGridView с раскрывающимся списком, в котором пользователь может вводить текст?





void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
{
DataGridViewComboBoxEditingControl cbo =
e.Control as DataGridViewComboBoxEditingControl;
cbo.DropDownStyle = ComboBoxStyle.DropDown;
}
}
Проблема с combobox и datagridview с привязкой к данным
Следующее решение работает для меня
private void dataGridView1_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
if (e.ColumnIndex == Column1.Index)
{
// Add the value to column's Items to pass validation
if (!Column1.Items.Contains(e.FormattedValue.ToString()))
{
Column1.Items.Add(e.FormattedValue);
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value =
e.FormattedValue;
}
}
}
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == Column1.Index)
{
ComboBox cb = (ComboBox)e.Control;
if (cb != null)
{
cb.Items.Clear();
// Customize content of the dropdown list
cb.Items.AddRange(appropriateCollectionOfStrings);
cb.DropDownStyle = ComboBoxStyle.DropDown;
}
}
}
данное условие if всегда оказывается истинным в моем поле со списком с привязкой к данным ... есть ли работа вокруг ... данного условия: ====================== ====================================== ======= if (! Column1.Items.Contains (e.FormattedValue.ToString ())) {Column1.Items.Add (e.FormattedValue); dataGridView1.Rows [e.RowIndex] .Cells [e.ColumnIndex] .Value = e.FormattedValue; }
if (!Column1.Items.Contains(e.FormattedValue.ToString())) {
Column1.Items.Add(e.FormattedValue);
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue;
}
всегда может вернуть истину, потому что
Column1.Items.Contains()
ищет значения String.
если e.FormattedValue не является String, сравнение не удастся.
пытаться
if (!Column1.Items.Contains(e.FormattedValue.ToString())) {
Column1.Items.Add(e.FormattedValue.ToString());
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue.ToString();
}
или же
if (!Column1.Items.Contains(e.FormattedValue)) {
Column1.Items.Add(e.FormattedValue);
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue;
}
Это только идея решения. Полное решение требует процедуры проверки, иначе DataGridView выдаст исключение. Полезное решение также часто требует выпадающего списка ячеек.