2011-09-15 2 views
0

나는 (잘하면) 실행 및 실행 취소하기 위해 DataGridViewRow를 멤버로 사용하는 명령 클래스를 사용하고 있습니다. 들어오는 dgvr을 생성자의 멤버 행 (예 : _row = r;)에 할당하려고하면 참조를 얻는 중이고 새로운 복사본이 아닌 것으로 표시되어 실행 취소 작업을 불가능하게 만듭니다 (원본 dgvr이 삭제됨). 다음 멤버 행이 비어).값별로 복사 DataGridViewRow?

public DataGridViewRow CloneWithValues(DataGridViewRow row) 
{ 
    DataGridViewRow clonedRow = (DataGridViewRow)row.Clone(); 
    for (Int32 index = 0; index < row.Cells.Count; index++) 
    { 
     clonedRow.Cells[index].Value = row.Cells[index].Value; 
    } 
    return clonedRow; 
} 

이를하지만, 내가 (이름 필드에 액세스 할 수 뒤에 스키마를 떠날 것으로 보인다 :

은 또한 아래 MSDN을 통해 "복사"행을하려했습니다 예 : _row.Cells [ "critical"]. 값).

DataGridViewRow의 값으로 복사를 수행하려면 어떻게해야합니까?

+0

DataGridView 수준에서 스키마를 가져 오지 않습니까? 다른 DataGridView 개체에서 복제 된 행을 사용하려는 경우 원본 DataGridView 개체의 복제본으로 만들면 DataGridView 개체에 스키마가 있다고 생각합니다. – Arun

+0

당분간 난처한 해결 방법을 찾았습니다 : udpate를 완료 한 후 행을 제거하는 대신 보이지 않게하십시오. 이렇게하면 실행 취소가 필요할 때를 대비하여 데이터가 그대로 유지됩니다. – Handprint

답변

1

데이터 테이블 수준에서 훨씬 간단한 방법을 시도해보십시오. datatable.Rows.Add를 호출하고 수정 된 datarow.ItemArray를 전달하십시오.

내가 생각하는 표 데이터 소스 인 테이블에 대한 참조가 아직 남아있는 경우이 방법이 효과적입니다. 나는 이것을 내 프로젝트에서 사용했고 일반적으로 잘 작동했다.

+0

제안대로 리팩토링해야 할 수도 있습니다. DataGridView를 사용하여 업데이트 할 행 선택 (확인란을 지정). 그런 다음 체크 박스를 기반으로 dgv 및 업데이트를 반복합니다. 이제 사용자가 선택한 행만 포함하도록 DataTable을 업데이트 한 다음 DataTable을 반복해야한다고 생각합니다. – Handprint

+1

귀하의 답변이 효과적이었습니다. DataTable.Row.ItemArray를 새 Object []에 전달했습니다. 캐스팅 문제는 별개로 잘 작동했습니다. – Handprint

+0

도움을 주셔서 감사합니다 :) –