2014-12-02 7 views
0

C#을 사용하여 Winform의 ReportViewer 컨트롤에 dataTable을 바인딩하는 데 문제가 있습니다.C# Winforms DataTable을 ReportrViewer 컨트롤에 바인딩

나는이 포럼이나 다른 포럼을 통해 해결책을 찾는 데 많은 시간을 할애했지만 아직까지는 찾아 내지 못했습니다. 디버그 마커를 코드에 넣었으며 올바른 2x2 배열 요약 보고서를 사용하여 완성 된 dataTable을 '볼 수 있습니다.' 그러나 DataTable을 ReportViewer 개체에 바인딩하려고하면 빈 화면이 나타납니다. 나는 코딩에 뭔가 빠져있는 것이 확실하지만, 그것이 무엇인지를 볼 수 없다 !!! 나는를 구축하는 데 사용하는 코드를

/*create global dataTable */ 
    DataTable _dTable = new DataTable("dtQOPS3710"); 

    /* create a new Dataset...*/ 
    Dataset _dSet = new Dataset("psysReporting.dSetReportViewer.xsd"); 

을 그리고 여기에 다음과 같이 내가이 개 글로벌 필드가 정의되어

  1. :

    여기 내보고 양식의 자세한 내용입니다 dataTable을 만들고 ReportViewer에 바인딩합니다.

    /는 제가 위에서 언급 한 바와 같이/

     _dTable.Columns.Add(new DataColumn("Nationality", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Total_Females", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Total_Males", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Elig.55", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Elig.56", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Elig.57", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Elig.58", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Elig.25", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Elig.26", typeof(String))); 
         _dTable.Columns.Add(new DataColumn("Total_Patients", typeof(String))); 
    
         /* now add the rows */ 
         for (int i = 0; i < _intMaxNoOfRows; i++) 
         { 
          DataRow dataRow = _dTable.NewRow(); 
    
          for (int j = 0; j < _maxJ; j++) 
          { 
           if (strArrayList[i, 1] != string.Empty) /* column 1 = Nationality */ 
            dataRow[j] = strArrayList[i, j]; 
          } 
    
          if (strArrayList[i, 1] != string.Empty)  /* column 1= Nationality */ 
          { 
           _dTable.Rows.Add(dataRow); 
          } 
    
         } 
    
         // add datatable '_dTable' to dataset '_dSet'... 
         _dSet.Tables.Add(_dTable); 
    
         // bind dataSet to report viewer 
         this.reportViewer1.Reset(); 
         this.reportViewer1.ProcessingMode = ProcessingMode.Local; 
         this.reportViewer1.LocalReport.ReportEmbeddedResource = "psysReporting.Report1.rdlc"; 
         this.reportViewer1.LocalReport.DataSources.Clear(); 
         this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(_dTable.TableName, _dTable)); 
    
         this.reportViewer1.Refresh(); 
    

    , 내가 코드를 디버깅 시도했습니다 (총 10)가 데이터 테이블에 열을 추가하고 나는 데이터 테이블에서 올바른 보고서를 볼 수 있지만, 바인딩이 작동하지 않는 것 같습니다! 코드를 실행할 때 오류가 발생하지 않습니다!

    도움이 될 것입니다.

답변

0

난 당신이 명시 적으로 (새로 고침 이전()) 마지막에 데이터를 바인딩 놓친 생각 :

this.reportViewer1.DataBind(); 

확인 this questionStuartLC 대답.


다른 점. for 루프를 최적화 할 수 있습니다. 테스트 nationnality는 루프 변수 j에 의존하지 않습니다.

// now add the rows 
for (int i = 0; i < _intMaxNoOfRows; i++) 
{ 
    // column 1 = Nationality 
    if (!string.IsNullOrWhiteSpace(strArrayList[i, 1])) 
    { 
     var dataRow = _dTable.NewRow(); 
     for (int j = 0; j < _maxJ; j++) 
      dataRow[j] = strArrayList[i, j]; 

     _dTable.Rows.Add(dataRow); 
    } 
} 
+0

확인을, 그래서 당신이 제안 나는 내 코드에 다음 줄을 추가 : (그냥 말, 귀하의 질문에 아무 링크)이 시도하지 this.reportViewer1.DataBindings.Add (새 바인딩 (_dTable.TableName, _dTable을 , _dTable.ToString())); this.reportViewer1.Refresh(); 앱을 실행하면 오류가 발생합니다. : 대상 컨트롤의 'dtQOPS3710'속성에 바인딩 할 수 없습니다. 매개 변수 이름 : PropertyName 내 DataTable의 propertyname을 얻으려면 어떻게해야합니까? – user3081742

+0

그럼이 질문이 해결 되었습니까? 대답을 표시하십시오. 다른 문제가있는 경우 ("dtQOPS3710"속성에 설명 된대로) 모든 세부 사항과 함께 다른 질문을 엽니 다. – Askolein

+0

DataGridview를 Excel 통합 문서로 내보내이 문제를 해결했습니다! 잘 작동합니다! – user3081742