Как добавить раскрывающийся список в каждую ячейку для определенного столбца c в DataGridView в C# - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь добавить раскрывающийся список во все ячейки для столбца в datagridView в моем приложении Winforms. Я создал представление программно, перетащив dgv в форму и добавив столбцы при создании класса.

Выпадающий список появляется в моем столбце DGV, однако, когда я нажимаю на список, ничего не открывается - я не уверен, заполнен ли ComboBox и не открывается, или он просто не содержит значений для пользователя Выбрать. Наведя курсор на объект при добавлении поля со списком в ячейку, я могу увидеть массив элементов, заполненный моими значениями.

Пожалуйста, сообщите, как я могу позволить пользователю выбирать значения в ячейке, которые заполняются из моих list

            DataGridViewTextBoxColumn diffKey = new DataGridViewTextBoxColumn();
            DataGridViewComboBoxColumn matchDesc = new DataGridViewComboBoxColumn();
            DataGridViewTextBoxColumn permDiff = new DataGridViewTextBoxColumn();

        grdEditAnnot.Columns.Add(diffKey);
        grdEditAnnot.Columns.Add(matchDesc);
        grdEditAnnot.Columns.Add(permDiff);

        DataGridViewComboBoxCell matchDescDropbox = new DataGridViewComboBoxCell();

        List<string> lstMatchDesc = new List<string>();

        LoadMatchDescriptions(out lstMatchDesc);


        foreach (string ddlItem in lstMatchDesc)
        {
            matchDescDropbox.Items.Add(ddlItem);
        }

        grdEditAnnot.Rows.Add(2);


        matchDescDropbox.DataSource = GetMatchDescDDL(); // Bind combobox with datasource.  
        matchDescDropbox.ValueMember = "Description";
        matchDescDropbox.DisplayMember = "Description";

        grdEditAnnot.Rows[0].Cells[1] = matchDescDropbox;

    }

    private DataTable GetMatchDescDDL()
    {
        DataTable l_dtDescription = new DataTable();
        l_dtDescription.Columns.Add("Description", typeof(string));

        List<string> matchDescLst;

        if (LoadMatchDescriptions(out matchDescLst) == 0)
        {
            foreach(string matchDesc in matchDescLst)
            {
                l_dtDescription.Rows.Add(matchDesc);
            }
        }

        return l_dtDescription;
    }

    private int LoadMatchDescriptions(out List<string> matchDscLst)
    {
        //string SQL = SQL USED TO POPULATE MY LIST 
        //a temporary list of test strings would work to show how to get this to work... ex: list of test1, test2, test3 etc 


        try
        {
            matchDscLst = new List<string>();
            rdr.ExecuteSQL(SQL);
            while ((rec = rdr.FetchNextRecord()) != null)
            {
                matchDscLst.Add(rec.GetStringVal(0));
            }

            return 0;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error Loading Match Descriptions", MessageBoxButtons.OK, MessageBoxIcon.Error);

            matchDscLst = new List<string>();
            return -1;
        }
    }

Это моя первая публикация на StackOverflow; извиняюсь, если это не в лучшем формате или нам нужна дополнительная информация ..

Результат кода: Созданная сетка; пользователь не может открыть comboBox или ввести столбцы текстового поля

1 Ответ

0 голосов
/ 29 мая 2020

используйте DataGridViewComboBoxCell

посмотрите этот пример: https://www.aspsnippets.com/Articles/Add-ComboBox-to-DataGridView-in-Windows-Forms-Application-using-C-and-VBNet.aspx

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