C#Datagridview组合框以编程方式更改项目

问题描述

我正在制作Winform应用程序。该表单具有一个datagridview。 Datagridview有6列。

  • ID:不可见。我用它来保存行号。
  • 说明:它将是文本。如果将此字段留空,则我希望下一列为只读。不可更改/不可编辑。
  • 操作:组合框。里面有7件物品。只要SelectedIndex为-1,我希望其他元素为只读。其他元素的内容将根据所选元素而变化。元素:单元,阀门,加热器,暂停,继续,重置。
  • 对象:组合框。如果将上一个元素选择为“单位”,那么如果要选择“阀门”作为“阀门1”,“阀门2”,“阀门3”,“阀门4”,并且如果已选择“阀门1”,“单元2”,“单位3”,我想将此元素的项目更改为“单位1”。作为加热器,我想将其更改为加热器1,加热器2。

我需要有关如何执行此操作的帮助。我该怎么办?

我可以通过EditingControlShowing事件来检测组合框选择的索引更改,该事件为:

private void dgv_EditingControlShowing(object sender,DataGridViewEditingControlShowingEventArgs e)
{
    if (dgv.CurrentCell.ColumnIndex == 2 || dgv.CurrentCell.ColumnIndex == 3)
    {
        combobox = e.Control as ComboBox;
        if (combobox != null)
        {
            combobox.SelectedIndexChanged -= new EventHandler(Combobox_SelectedIndexChanged);

            combobox.SelectedIndexChanged += Combobox_SelectedIndexChanged;
        }
    }
}

private void Combobox_SelectedIndexChanged(object sender,EventArgs e)
{
    if (dgv.CurrentCell.ColumnIndex == 2)
    {
        int selectedIndex = ((ComboBox)sender).SelectedIndex;
        switch (selectedIndex)
        {
            case 0:         /// şırınga
                int rowIndex = dgv.CurrentRow.Index;
                DataGridViewRow row = new DataGridViewRow();

                dgv.Rows[rowIndex].Cells[3] = Cell_Operation_Units;
                dgv.Refresh();
                break;
            case 1:         /// vana
                dgv.Rows[dgv.Rows.Count - 1].Cells[3] = Cell_Operation_Valves;
                break;
            case 2:         /// ısıtıcı
                dgv.Rows[dgv.Rows.Count - 1].Cells[3] = Cell_Operation_Heaters;
                break;
            default:
                break;
        }
        dgv.Refresh();
    }
    else if (dgv.CurrentCell.ColumnIndex == 3)
    {
        int selectedIndex = ((ComboBox)sender).SelectedIndex;
        switch (selectedIndex)
        {
            case 0:         /// şırınga
                int rowIndex = dgv.CurrentRow.Index;
                DataGridViewRow row = new DataGridViewRow();

                row = dgv.Rows[rowIndex];
                dgv.Rows.RemoveAt(rowIndex);
                dgv.Rows.Insert(rowIndex,row);

                //dgv.Rows[dgv.Rows.Count - 1].Cells[3] = Cell_Operation_Units;
                break;
            case 1:         /// vana
                dgv.Rows[dgv.Rows.Count - 1].Cells[3] = Cell_Operation_Valves;
                break;
            case 2:         /// ısıtıcı
                dgv.Rows[dgv.Rows.Count - 1].Cells[3] = Cell_Operation_Heaters;
                break;
            default:
                break;
        }
    }
}

但是,如果我更改相同的行和相同的组合框单元格,则会收到异常消息,告诉我“ Cell_Operation_Units已成为成员...。”

我该怎么办?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)