Есть ли более простой или однострочный метод для получения выбранного индекса DataGridViewComboBoxCell? - PullRequest
0 голосов
/ 09 января 2019

У меня есть сетка данных, которая в основном содержит столбцы 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; }
}

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать ниже код:

 myDGV.Columns["SampleColumn"].Index;

Это будет работать в winForms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...