홈>
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
- 답변 # 2
moveRowTo
dataGridView2
관련 자료
- xcode - udunits-2 ---> clang - 오류 : 해당 파일 또는 디렉토리가 없습니다 : '_reentrant'
- locking - java 8 재진입 잠금 및 조건으로 인해 illegalmonitorstateexception이 발생 함 - 현재 스레드가 소유자가 아님
- c++ - 재진입 Bison/Flex, yyscan_t의 각 인스턴스에 대한 오류 메시지를 얻는 방법
- locking - 스칼라의 모나드 내 재진입 잠금
- flex lexer - 재진입 들소 파서 다양한 섹션의 코드가 전역입니까?
- java - 하위 클래스에서 Reentrant 클래스의 getOwner () 메소드를 직접 사용할 수없는 이유는 무엇입니까?
- c - 이 기능은 재진입합니까?
- c - 재 입력 기능에 putenv를 만드는 방법은 무엇입니까?
- c - 재진입과 스레드 안전 기능의 차이점
- delay - VHDL의 프로세스는 재진입입니까?
관련 질문
- c# : txt에서 datagridview로 파일을 가져 오려고하면 오류가 발생합니다.
- c# : 텍스트 상자의 사용자 입력을 데이터 그리드보기의 필드에 추가하려면 어떻게해야합니까?
- c# : DataTable을 데이터 소스로 사용하여 DataGridView 행 삭제
- DataGridView c# Winforms에 콤보 박스 추가
- c# : DataGridView 셀이 비어 있는지 확인하는 방법은 무엇입니까?
- DataGridViewSelected Cells에서 데이터 테이블 만들기 c#
- c# datagridview 적십자
- c# : Entity Framework Core 5에 두 엔터티가 관련이 없다고 알리는 방법은 무엇입니까?
- c# : DataGridview에서 행을 삭제하는 방법은 무엇입니까?
- c# : OnSelectedIndexChanged가 GridView에서 실행되지 않음
이 오류는
와이즈 비즈이 게시물에서 허용되는 답변입니다.
수정 (확인) :
사용BeginInvoke
에 전화 .private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) { this.BeginInvoke(new MethodInvoker(() => { moveRowTo(dataGridView2, 0, 1); })); }
비동기 호출이므로BeginInvoke
즉시 반환하고dataGridView2_CellEndEdit
그 이후에 메소드가 실행됩니다. 더 이상 현재 활성 셀을 사용하지 않습니다.