问题描述
我正在制作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 (将#修改为@)