.net 为什么我的datagridviewcolumn此时不接受更改?

.net 为什么我的datagridviewcolumn此时不接受更改?,.net,datagridview,foreign-keys,.net,Datagridview,Foreign Keys,我将把一个强类型数据集表放到datagridview中。然后添加一列组合框,让外键按名称而不是ID进行选择。也许有一种更简单的方法可以做到这一点 我可以将typeID列转换为comboboxcolumn,同时仍然能够将数据源转换回强类型数据集表类型吗?我是否需要从数据源获取它,或者datagridview上的更改是否自动传递回数据集 这个代码怎么了 FormDg fDg; internal DsTech.TechObjectsDataTable ShowDg(IWin32Window o

我将把一个强类型数据集表放到datagridview中。然后添加一列组合框,让外键按名称而不是ID进行选择。也许有一种更简单的方法可以做到这一点

我可以将typeID列转换为comboboxcolumn,同时仍然能够将数据源转换回强类型数据集表类型吗?我是否需要从数据源获取它,或者datagridview上的更改是否自动传递回数据集

这个代码怎么了

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;

    }
这是我将2分解成的代码,以防我读错了,它们实际上是不同的

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

使用vbforums.com,我找到了使用绑定源的示例,并确保在设置datagridview的datasource属性之前添加了组合框,并且能够使其正常工作

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