2016-10-13 2 views
0

제한된 DGV에서 일반 DGV로 DGV를 복사해야합니다.Datagridview는 UI에 데이터를 표시하지 않지만 코드 (디버그)에 데이터가 있음

이유 : 데이터 집합에서로드 한 후 콤보 상자 열을 추가해야하며 바인딩 된 DGV에서는 불가능합니다. 그래서 새로운 DGV에서 내용을 복사하려고했습니다. 더 좋은 아이디어? 그런 다음 copy Datagrids

내가이이 버튼을 테스트하기 위해 쓴 :

내가 DGV 복사하려면이 옵션을 사용하는 것이 아무튼 때문에

private void button1_Click(object sender, EventArgs e) 
    { 
     dgvExcel2.AutoGenerateColumns = true; 
     dgvExcel2 = CopyDataGridView(dgvExcel); 
     dgvExcel2.Refresh(); 
     dgvExcel2.Show(); 
     dgvExcel2.Update(); 
    } 

이 (업데이트, 쇼, 새로 고침 뭔가를 시도를 '작업)

UI에서 프로그램을 실행할 때 dgvExcel2는 항상 비어 있습니다. 하지만 내가 디버깅 할 때 데이터에 내용이 있음을 알 수 있습니다.

답변

0

정확하게 기억하면 ComboBox 기능을 원할 경우 AutoGenerateColumns를 true로 설정할 수 없습니다. DataGridView에서 DataGridViewComboBoxColumn으로 미리 정의해야합니다.

또한 DGV와 데이터를 복사하는 것이 아니라 DataTables 또는 List<T>으로 UI 뒤에서이를 처리하는 것이 가장 좋습니다.

참조하십시오 다음과 같은 답변 :

DataGridView set column cell Combobox

Bind Data to the Windows Forms DataGridView Control

편집 :

UI를 뒤에 데이터 테이블에서 데이터 처리는간에 직접 행을 복사 반대로 DGV가 귀하의 문제를 해결하는 것으로 보입니다. 이렇게하면 DGV 복사 방법의 필요성이 사라지고 삶이 훨씬 쉬워집니다.

단계 것 :

: 바인딩 소스에

BindingSource binding = new BindingSource();

  • 지정 데이터 테이블 :

    1. 을 DataTable의 형식 (myData)
    2. 에서 데이터가 BindingSource에 인스턴스를 가져옵니다

      binding.DataSource = myData;

    3. 그런 다음 해당 바인딩 소스를 관련 DGV에 할당하십시오.

      myDataGridView.DataSource = binding;

    4. 은 그런 대신 DGVs에서 행을 복사하는 당신은 당신의 바인딩을 재 할당하거나 새 DGV에 대한 새로운 것을 만들고 새로운 바인딩에 동일한 데이터 테이블을 할당 할 수 있습니다.

    이 내용이 명확하고 질문을 올바르게 이해하기 바랍니다.

  • +0

    죄송합니다. 어쩌면 설명을 잘못한 것일 수 있습니다. 내 첫 번째 문제는 dgvExcel2가 UI에 데이터를 표시하지 않는다는 것입니다. 나는 아직 ComboBox-Row를 추가하지 않았다. 그러나 미래를 알기 좋습니다. – Atzen444

    +0

    아 좋아, 내가 편집을 추가 할 것입니다, 바인딩 소스를 사용하고 있습니까? –

    +0

    이렇게하면 DGV가 모두 바인딩됩니다 ... 바인딩없이 데이터가 포함 된 1 dgv가 필요합니다. 제한된 DGV에 콤보 박스 행을 추가 할 수 없습니다. – Atzen444

    관련 문제