У меня есть сетка данных, которая в основном содержит столбцы DataGridViewComboBoxColumn в качестве данных. Количество столбцов в DataGridView варьируется в зависимости от типа
продукт в списке. Чтобы упростить редактирование каждой строки данных, я создал модальный редактор, отображающий все столбцы в виде нескольких строк и столбцов.
(необходимо убрать горизонтальную прокрутку, навязанную пользователю сеткой данных). Данные в одной строке таблицы данных необходимо перенести в модальный редактор.
Очевидно, что элементы управления в модальном редакторе не будут иметь тип DataGridViewComboBoxCell. В настоящее время они имеют тип ListBox, но в большинстве
В случаях, когда это достаточно просто изменить на ComboBox.
Элементы управления в модальном редакторе должны быть запущены с текущим
выбранные значения ячеек DataGridViewComboBox, если пользователь ранее
отредактировал элемент управления.
Первоначально я планировал сделать это, чтобы получить выбранный индекс
DataGridViewComboBox, но, кажется, не существует. Есть ли способ получить
выбранный индекс, который не включает сравнение значения ячейки с каждым из
элементы в списке DataGridViewComboBoxColumn.items?
Этот вопрос относится ко второму конструктору, в котором он просматривает список элементов для получения выбранного индекса.
public class ControlTransferData
{
private List<string> _valueStrings;
private string _name;
private bool _hasSelection;
private int _indexSelected;
public ControlTransferData()
{
_valueStrings = new List<string>();
_name = null;
_indexSelected = -1;
_hasSelection = false;
Width = 0;
Height = 0;
}
public ControlTransferData(DataGridViewComboBoxColumn CboxCol, DataGridViewCell currentControlToTransfer)
{
_valueStrings = new List<string>();
foreach (string item in CboxCol.Items)
{
string itemStringValue = item.ToString();
if (!string.IsNullOrWhiteSpace(itemStringValue) && !string.IsNullOrEmpty(itemStringValue))
{
_valueStrings.Add(itemStringValue);
}
}
if (currentControlToTransfer.Value != null)
{
_hasSelection = true;
int selectedIndex = 0;
string selectedItem = currentControlToTransfer.Value.ToString();
foreach (string currentString in _valueStrings)
{
if (currentString.CompareTo(selectedItem) == 0)
{
_indexSelected = selectedIndex;
}
selectedIndex++;
}
}
else
{
_indexSelected = -1;
_hasSelection = false;
}
_name = CboxCol.HeaderText;
Width = 0;
Height = 0;
}
public string Name { set { _name = value } get { return _name; } }
public List<string> ValueStrings { set { _valueStrings = value; } get { return _valueStrings; } }
public bool HasSelection { set { _hasSelection = value; } get { return _hasSelection; } }
public int IndexSelected { set { _indexSelected = value; } get { return _indexSelected; } }
public int Width { set; get; }
public int Height { set; get; }
}