2014-07-22 68 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或其他事件):

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 = ""; 
     } 
    } 

如果被點擊的圖表元素是DataPoint,那麼你可以得到x和/或y值根據需要。您可能需要考慮的一件事情是:您可能不想自己構建日期表示(string X = dr["DATE"].ToString() + " " + dr["HOUR"].ToString();),您可能需要使用DateTime對象作爲DataPoint的x值,並且只需使用適合顯示的圖表格式(chart.AxisX .Format =「mmddyy hh」以僞代碼形式)。這將使創建子圖表時比較容易。

另一點:根據所提供的代碼,不需要您最後一行(chart.DataBind();)中的一行。您從不爲圖表指定DataSource,並且手動添加DataPoints,因此不需要數據綁定。