2014-07-22 7 views
0

내 데이터베이스에서 테이블을 기반으로 간단한 winform 보고서를 만들려고합니다. 많은 집계가 있기 때문에 하나의 상위 차트와 선택 가능한 하위 차트를 만들고 싶습니다. 다음은 이제 모든 것이 잘 작동 할 때까지 "부모"보고서를부모 - 자식 보고서를 만드는 방법

private bool DrawReport(DataTable dt) 
    { 
     string serieName; 
     foreach (object itemChecked in checkedListBox1.CheckedItems) 
     { 
      serieName = itemChecked.ToString(); 
      chart1.Series.Add(serieName); 
      chart1.Series[serieName].ChartType = SeriesChartType.Column; 
      //chart1.Series[0].IsValueShownAsLabel = true; 
     } 
     chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 90; 
     chart1.ChartAreas[0].AxisX.Interval = 1; 
     chart1.ChartAreas[0].AxisY.MajorGrid.LineWidth = 0; 
     chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0; 
     foreach (DataRow dr in dt.Rows) 
      { 
       string X = dr["DATE"].ToString() + " " + dr["HOUR"].ToString(); 
       string Y = dr["MED"].ToString(); 
       try 
       { 
        chart1.Series[SER].Points.AddXY(X, Y); 
       } 
       catch (Exception) 
       { 
        throw; 
       } 
     } 
     chart1.DataBind(); 
     chart1.Visible = true; 
     return true; 
    } 

을 그립니다 핵심입니다.

X 축 레이블에는 실제로 시간이 포함되어 있습니다 (사실 4 또는 6 시간 기간). 요점은 다른 차트 "하위 하나"를 만드는 것입니다. 세리 요소를 클릭하면 나타납니다. 이제 질문은 클릭 한 x 축 요소 (사실 날짜 문자열 임)의 값을 변수에 읽는 방법입니다. 툴팁에이 값을 표시 할 수 있습니다.

chart1.Series[0].ToolTip = "#VALX" 

그러나 변수에 할당하는 방법을 찾을 수 없습니다.

답변

1

MSDN에서 차트 샘플을 다운로드하는 것이 좋습니다.이 차트를 사용하면 도움이 될 수 있습니다. 특정 문제에 대해서는 Chart.HitTest을 사용하여 마우스가 클릭되거나 이동 된 차트 요소를 파악할 수 있습니다. 같은 뭔가 (내가 MouseMove이 사용하지만, 쉽게 MouseClick 또는 다른 이벤트를 적응할 수) : 클릭 된 차트 요소가 DataPoint 인 경우 다음 x 및/또는 y를 얻을 수

private void ChartMouseMove(object sender, MouseEventArgs e) 
    { 
     try 
     { 
      HitTestResult[] htrList = Chart.HitTest(e.X, e.Y, false, ChartElementType.DataPoint); 
      // loop through all of the elements in htrList, and make the "child" chart 
     } 
     catch (Exception) 
     { 
      StatusLabelText = ""; 
     } 
    } 

필요에 따라 값. 한 가지 고려해야 할 사항은 자신이 날짜 표현을 구성하는 대신 (string X = dr["DATE"].ToString() + " " + dr["HOUR"].ToString();) 의 x 값으로 DateTime 개체를 사용하고 표시를 위해 차트 형식을 적절히 지정할 수 있습니다 (chart.AxisX .Format = "mmddyy hh"의사 코드). 이렇게하면 하위 차트를 만들 때의 요점을보다 쉽게 ​​일치시킬 수 있습니다.

다른 한 점 : 제시된 코드를 기반으로 한 마지막 줄 중 하나 (chart.DataBind();)가 필요하지 않습니다. 차트에 DataSource을 지정하지 않고 DataPoints을 수동으로 추가하므로 데이터 바인딩이 필요하지 않습니다.