C# DataGridViewComboBoxColumn中的选定项始终检索第一个值

C# DataGridViewComboBoxColumn中的选定项始终检索第一个值,c#,winforms,datagridview,datagridviewcombobox,datagridviewcomboboxcolumn,C#,Winforms,Datagridview,Datagridviewcombobox,Datagridviewcomboboxcolumn,假设我拥有的数据是'valuenumber1','valuenumber2','valuenumber3' 我有一个问题,当选择'valuenumber2'或'valuenumber3'时,将创建下一行,但创建上一行(具有'valuenumber2'或'valuenumber3')将更改为'valuenumber1',这将导致所有创建的行的值仅为'valuenumber1' 例如(请原谅我的图片编辑): 我的代码示例: 注意:“cto”是与Oracle的连接 由于datagridview中的C

假设我拥有的数据是
'valuenumber1'
'valuenumber2'
'valuenumber3'

我有一个问题,当选择
'valuenumber2'
'valuenumber3'
时,将创建下一行,但创建上一行(具有
'valuenumber2'
'valuenumber3'
)将更改为
'valuenumber1'
,这将导致所有创建的行的值仅为
'valuenumber1'

例如(请原谅我的图片编辑):

我的代码示例:

注意:“cto”是与Oracle的连接


由于datagridview中的ComboBox没有SelectedIndex,是否有其他我不知道的解决方案,即使用其他事件处理程序

我认为您不希望以这种方式加载组合项目。而是将该列绑定到从DB检索的列表。大概是这样的:

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);
}

无法在完全未绑定的
DataGridview
中复制该行为。但是,如果datagridview包含一些绑定列和一些未绑定列,则未绑定列将丢失其值。考虑复制一个下面的代码并粘贴到一个干净窗体的<代码>加载< /代码>事件中,运行该应用程序并查看结果:<代码> var dgv=新DATAGIDVIEW();dgv.Dock=DockStyle.Fill;var combo=newdatagridviewcomboxcolumn();AddRange(新字符串[]{“1”、“2”、“3”});combo.HeaderText=“combo”;dgv.Columns.Add(组合);this.Controls.Add(dgv);dgv.BringToFront()这就是为什么我说需要a。我们如何知道您在哪种环境下进行测试?我们怎么知道
BusinessLayer.GetList()的结果是什么?另外,还不清楚您的
DataGridView
是如何设置的。您应该能够使用一个非常简单的代码(如我共享的代码)重现问题。
private void dgvList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox cmb = e.Control as ComboBox;
    if (cmb != null)
         cmb.SelectedIndex = -1;
}
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);
}