如何从DataGrid中的组合框中选择值

时间:2016-08-11 15:54:57

标签: winforms

我在Datagrid中有8列。第8列是组合框。我为此定义了一个DataGridViewComboBoxColumn。我对该组合框有“id”和“Name”。

现在我有两个问题

  1. 如果我想选择一个项目,我可以使用哪个事件,然后立即触发。 CellValueChanged事件仅在您点击某处后触发。

  2. 我找到了CurrentCellDirtyStateChanged,但这并没有给我“id”。它只使用datagrid.CurrentCell.EditedFormattedValue给我“名字”;如何获得“ID”

  3. 我的目的是在某人选择一个项目后立即获得“id”。提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

我有一个解决方案。如果有任何其他解决方案,欢迎

我使用事件处理程序...

在将项目添加到组合框

之后添加以下行

//我们将处理DataGridView的这些事件             dataGridView1.CellEndEdit + = new DataGridViewCellEventHandler(dataGridView1_CellEndEdit);             dataGridView1.EditingControlShowing + = new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);         }

    void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (cbm != null)
        {
            // Here we will remove the subscription for selected index changed
            cbm.SelectedIndexChanged -= new EventHandler(cbm_SelectedIndexChanged);
        }
    }

    void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        // Here try to add subscription for selected index changed event
        if (e.Control is ComboBox)
        {
            cbm = (ComboBox)e.Control;
            if (cbm != null)
            {
                cbm.SelectedIndexChanged += new EventHandler(cbm_SelectedIndexChanged);
            }
            currentCell = this.dataGridView1.CurrentCell;
        }
    }

    void cbm_SelectedIndexChanged(object sender, EventArgs e)
    {
        // Invoke method if the selection changed event occurs
        BeginInvoke(new MethodInvoker(EndEdit));
    }

    void EndEdit()
    {
        // Change the content of appropriate cell when selected index changes
        if (cbm != null)
        {
            DataRowView drv = cbm.SelectedItem as DataRowView;
            if (drv != null)
            {
                this.dataGridView1[currentCell.ColumnIndex + 1, currentCell.RowIndex].Value = drv[2].ToString();
                this.dataGridView1.EndEdit();
            }
        }
    }
}