无法在列和行相同的位置更改单元格类型

时间:2015-01-22 06:47:27

标签: c# winforms datagridview

private void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("Col1");
    dt.Columns.Add("Col2);

    for (int j = 0; j < 10; j++)
    {
        dt.Rows.Add(new string[] { j.ToString(), "aaa"});
    }

     dataGridView1.DataSource = dt;
}

这里我创建了一个数据表并将其绑定到数据网格视图。我想要在单击时将update column = 1和row = 1 cell作为组合框单元格 所以我使用了以下活动。

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1 && e.RowIndex == 1)
    {
        object value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
        ComboBoxCell = new DataGridViewComboBoxCell();
        ComboBoxCell.Items.AddRange(Values);
        this.dataGridView1[1, 1] = ComboBoxCell;
        this.dataGridView1[1, 1].Value = Values[0];
        TextBoxCell = null;
    }
}

private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1 && e.RowIndex == 1)
    {
        TextBoxCell = new DataGridViewTextBoxCell();
        this.dataGridView1[1, 1] = TextBoxCell;
        ComboBoxCell = null;
    }
}

但是在cell_leave事件中它引发了异常

  

&#34;操作无效,因为它会导致重新调用   SetCurrentCellAddressCore函数&#34;

请帮我解决这个问题。

我尝试在column = 1 row = 2上添加组合框,然后它正常工作 但只有当出现相同的列且出现同一行问题时

1 个答案:

答案 0 :(得分:1)

我认为您可以使用CellMouseLeave事件。

private void dataGridView1_CellMouseLeave(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1 && e.RowIndex == 1)
    {
        DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell();
        this.dataGridView1[1, 1] = TextBoxCell;
    }
}

我尝试了上面的代码,它运行正常。

我还建议你阅读以下答案。

Why is my bound DataGridView throwing an "Operation not valid because it results in a reentrant call to the SetCurrentCellAddressCore function" error?

它不完全适用于CellLeave事件,但它可以帮助您找到一些解决方案。