>

cell_endedit에서 호출 된 함수가 있습니다. dataGridView 내부에서 dataGridViewRow를 이동합니다.

private void moveRowTo(DataGridView table, int oldIndex, int newIndex)
{
    if (newIndex < oldIndex)
    {
        oldIndex += 1;
    }
    else if (newIndex == oldIndex)
    {
        return;
    }
    table.Rows.Insert(newIndex, 1);
    DataGridViewRow row = table.Rows[newIndex];
    DataGridViewCell cell0 = table.Rows[oldIndex].Cells[0];
    DataGridViewCell cell1 = table.Rows[oldIndex].Cells[1];
    row.Cells[0].Value = cell0.Value;
    row.Cells[1].Value = cell1.Value;
    table.Rows[oldIndex].Visible = false;
    table.Rows.RemoveAt(oldIndex);
    table.Rows[oldIndex].Selected = false;
    table.Rows[newIndex].Selected = true;
}

행 table.Rows.Insert (newIndex, 1)에서 다음 오류가 발생합니다.

Unhandled exception of type "System.InvalidOperationException" in System.Windows.Forms.dll

Additional data: Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function.

현재 셀을 편집하는 과정에서 다른 셀을 클릭하면 발생합니다. 이러한 오류를 피하고 행을 올바르게 삽입하려면 어떻게합니까?


  • 답변 # 1

    이 오류는

    와이즈 비즈

    이 게시물에서 허용되는 답변입니다.

    수정 (확인) :

    Any operation that results in the active cell being changed while the DataGridView is still using it

    사용   BeginInvoke 에 전화 .

    moveRowTo
    
    

    private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) { this.BeginInvoke(new MethodInvoker(() => { moveRowTo(dataGridView2, 0, 1); })); }  비동기 호출이므로 BeginInvoke  즉시 반환하고 dataGridView2_CellEndEdit  그 이후에 메소드가 실행됩니다.  더 이상 현재 활성 셀을 사용하지 않습니다.

  • 답변 # 2

    moveRowTo
    
    
    dataGridView2

  • 이전 python - readlink () 함수를 구현하는 데 문제가 있습니다
  • 다음 Neo4j Cypher Profile 키워드 및 실행 계획 이해