Почему моя колонка данных не принимает изменения на этом этапе? - PullRequest
0 голосов
/ 26 июня 2009

Я перевожу строго типизированную таблицу набора данных в сетку данных. затем добавьте столбец со списком, чтобы внешние ключи выбирались по имени, а не по идентификатору. Возможно, есть более простой способ сделать это.

Могу ли я преобразовать столбец typeID в comboboxcolumn, сохраняя при этом возможность приведения источника данных обратно в тип таблицы моего строго типизированного набора данных? Нужно ли возвращать его из источника данных или изменения в представлении данных автоматически передаются обратно в набор данных?

Что не так с этим кодом?

FormDg fDg;
    internal DsTech.TechObjectsDataTable ShowDg(IWin32Window owner, Db db)
    {
        fDg = new FormDg();

        fDg._dg.DataSource = db.getDs().TechObjects;
        var TypeSelecter = new DataGridViewComboBoxColumn();
        var types = db.getdsObjectTypes();
        TypeSelecter.DataSource = types;
        TypeSelecter.DisplayMember = "type";
        TypeSelecter.Name = "Types";
        TypeSelecter.ValueMember = "ID";
        fDg._dg.Columns["typeID"].DisplayIndex=fDg._dg.Columns.Count-1;
        fDg._dg.Columns.Add(TypeSelecter);
        fDg._dg.ReadOnly = false;
        Application.DoEvents();
        for (int i = 0; i < fDg._dg.RowCount; i++)
        {
            if ((fDg._dg.Rows[i].Cells["typeID"].Value is DBNull) == false)
                //Line below does not work
                UpdateTypesRow(i,(int)fDg._dg.Rows[i].Cells["typeID"].Value);
        }
        fDg._dg.CellEndEdit += new DataGridViewCellEventHandler(_dg_CellEndEdit);


        if (fDg.ShowDialog(owner) == DialogResult.OK)
        {
            return (DsTech.TechObjectsDataTable)fDg._dg.DataSource;
        }
        else return null;

    }

Хотя этот код работает просто отлично

void _dg_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (fDg._dg.Columns[e.ColumnIndex].Name == "Types")
        {
            fDg._dg.Rows[e.RowIndex].Cells["typeID"].Value = fDg._dg.Rows[e.RowIndex].Cells["Types"].Value;
            //update typeID column

        }
        else if (fDg._dg.Columns[e.ColumnIndex].Name == "typeID")
        {
            //update types column
            UpdateTypesRow(e.RowIndex,(int) fDg._dg.Rows[e.RowIndex].Cells["typeID"].Value);
        }
    }

Вот код, в который я включил 2 на всякий случай, если я неправильно читал, а они действительно отличались

    void UpdateTypesRow(int rowIndex, int value)
    {
        fDg._dg.Rows[rowIndex].Cells["Types"].Value = value;
    }

1 Ответ

0 голосов
/ 01 июля 2009

Используя vbforums.com, я нашел примеры использования источников привязки и убедился, что добавил поле со списком перед установкой свойства источника данных datagridview, и смог заставить это работать. Поток и код в c #

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