Выбранные элементы в DataGridViewComboBoxColumn всегда получают первое значение - PullRequest
0 голосов
/ 07 июня 2018

Предположим, у меня есть данные 'valuenumber1', 'valuenumber2', 'valuenumber3'.

. У меня проблема, когда при выборе 'valuenumber2' или 'valuenumber3' будет создана следующая строка, нопредыдущая строка (имеющая 'valuenumber2' или 'valuenumber3') изменится на 'valuenumber1', и это приведет к тому, что все созданные строки будут иметь значение только 'valuenumber1'.

Например (пожалуйста, извините за редактирование моего изображения):

enter image description here

Пример моих кодов:

Примечание: 'cto' - это соединение с Oracle

public class Result
{
    public Result()
    {
        ds = new DataSet();
    }

    private DataSet ds;
    public List<ComboItems> LCI { get; set; }

    public DataSet ResultDataSet
    {
        get
        {
            return ds;
        }
        set
        {
            ds = value;
        } 
    }        
}

public class ComboItems
{
    public string objectName { get; set; }
    public string objectID { get; set; }

    public ComboItems(){}

    public ComboItems(string objectName, string objectID): this()
    {
        this.objectName = objectName;
        this.objectID = objectID;
    }

    public override string ToString()
    {
        return objectName;
    }
}

public Result GetList()
{
        Result rs = new Result();

        string commandText = "SELECT CUST_CODE, CUST_NAME FROM MAIN_CUSTOMER";
        rs.ResultDataSet = cto.Select(commandText);

        int maxRow = rs.ResultDataSet.Tables[0].Rows.Count;

        List<ComboItems> lci = new List<ComboItems>();

        for (int tblrow = 0; tblrow < maxRow; tblrow++)
        {
            ComboItems ci = new ComboItems();
            ci.objectID = rs.ResultDataSet.Tables[0].Rows[tblrow]["CUST_CODE"].ToString();
            ci.objectName = rs.ResultDataSet.Tables[0].Rows[tblrow]["CUST_NAME"].ToString();

            lci.Add(ci);
        }
        rs.LCI = lci;
        return rs;
}

private void loadProjectList()
{
        Result rs = GetList();

        DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
        cmb.HeaderText = "Select Data";
        cmb.Name = "cmb";
        cmb.MaxDropDownItems = 4;

        foreach (ComboItems ci in rs.LCI)
        {
            cmb.Items.Add(ci);
        }

        dgvList.Columns.Add(cmb);

        this.dgvList.EditingControlShowing +=
            new DataGridViewEditingControlShowingEventHandler(dgvList_EditingControlShowing);
}

Я пытался использовать обработчик событий EditingControlShowing, но он не работает:

private void dgvList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox cmb = e.Control as ComboBox;
    if (cmb != null)
         cmb.SelectedIndex = -1;
}

Поскольку ComboBox в datagridview не работаетесть SelectedIndex, есть ли другие решения, о которых я не знаю, т.е. с помощью другого обработчика событий?

1 Ответ

0 голосов
/ 07 июня 2018

Не думаю, что вы хотите загружать свои комбинированные предметы таким образом.Скорее, привяжите этот столбец к списку, который вы извлекаете из своей БД.Как то так:

private void loadProjectList()
{
    Result rs = GetList();

    DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
    cmb.HeaderText = "Select Data";
    cmb.Name = "cmb";
    cmb.MaxDropDownItems = 4;
    cmb.DataSource = rs.LCI;
    cmb.DisplayMember = "objectName";
    cmb.ValueMember = "objectID";

    dgvList.Columns.Add(cmb);
}
...