2013-03-20 1 views
0

Teechart 버전을 사용하고 있습니다 .Net & VS2005.x 축 날짜 및 시간 제어를 tchart하는 방법은 무엇입니까?

그래프 유형의 X 축은 날짜와 시간의 Y 축을 Series에 추가했습니다.

x 축 날짜와 시간의 null 값을 표시하고 싶지 않습니다.

--------- 데이터 테이블 ---------------------

enter image description here

----- TeeChart는 X 축 디스플레이 -----------

enter image description here

적색 라인은 커서 도구이다. 'follow mouse = true'의 값을 설정했습니다. 커서 도구는 텍스트에 x 축의 날짜 및 시간 값을 나타냅니다. 데이터 테이블에없는 시간을 보여줍니다. 다음 값 18:23:49는 18:23:50 예제를 보여줍니다. 데이터 테이블의 날짜와 시간에 대한 x 축 값을 표현하고 싶습니다.

my code: 

private void TeeChartSet() 
{ 
Steema.TeeChart.Styles.Line line = new Steema.TeeChart.Styles.Line(); 
TChart1.Series.Add(line); 
line.XValues.DateTime = true; 
TChart1.Axes.Bottom.Increment = Steema.TeeChart.Utils.DateTimeStep[(int)Steema.TeeChart.DateTimeSteps.OneSecond]; 
line.Stairs = true;    

TChart1.Series[i].XValues.DataMember = "SetTime"; 
TChart1.Series[i].YValues.DataMember = "Park Brk Pres Sw1"; 
TChart1.Series[i].DataSource = Datatable; 

TChart1.Axes.Bottom.Labels.DateTimeFormat = "HH:mm:ss"; 
Steema.TeeChart.AxisLabelStyle.PointValue; 
} 

private void cursor1_Change(object sender, CursorChangeEventArgs e) 
{ 
    TChart1.Invalidate(); 
    DateTime Time = DateTime.FromOADate(e.XValue); 
    sli_CursorTime.Text = "Cursor Time : " + Time.ToString("yyyy-MM-dd HH:mm:ss"); 
} 

private void MakeDt() //Make datatable Sample Code 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("SetTime"); 
    dt.Columns.Add("Park Brk Pres Sw1"); 

    DataRow row; 


    for (int i = 0; i < 10; i++) 
    { 
     row = dt.NewRow(); 
     row["SetTime"] = DateTime.Now.AddSeconds(i * 5); 
     row["Park Brk Pres Sw1"] = 0; 
     dt.Rows.Add(row); 
    } 
} 
+0

안녕하세요, 당신은, 당신의 DataValues ​​(DataTable을)를 첨부 할 수 ? 감사합니다, –

+0

데이터 테이블 샘플 코드를 만들기 위해 추가하십시오. 감사. –

답변

0

많은 도움을 주신 귀하 께 감사드립니다. 문제를 해결할 수 있기 때문에 코드를 만들었습니다. 코드를 작성하기 위해 필자는 주석 도구, 커서 도구 및 시리즈 선을 사용하여 주석 도구에서 시리즈 포인트의 값만 보여줍니다. 또한 시리즈의 DateTimeFormat을 변경했습니다. 데이터 값을 Excel 형식으로 내보내는 코드 줄을 추가하여 DateTimeFormat을 변경하는 결과를 볼 수 있고 올바른 방식으로 작동하기 때문에 Excel 형식으로 내보낼 수 있습니다.

Steema.TeeChart.Tools.CursorTool cursorTool1; 
private Steema.TeeChart.Tools.Annotation ann; 
private double xval; 
private void InitializeChart() 
{ 
    tChart1.Aspect.View3D = false; 
    //Tools 
    cursorTool1 = new Steema.TeeChart.Tools.CursorTool(tChart1.Chart); 
    cursorTool1.Style = Steema.TeeChart.Tools.CursorToolStyles.Vertical; 
    // cursorTool1.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
    cursorTool1.FollowMouse = true; 

    // cursorTool1.OriginalCursor = Cursors.Arrow; 
    ann = new Steema.TeeChart.Tools.Annotation(tChart1.Chart); 
    ann.Shape.Pen.Visible = false; 
    ann.Shape.Shadow.Visible = false; 
    ann.Shape.ShapeStyle = Steema.TeeChart.Drawing.TextShapeStyle.RoundRectangle; 
    //Series 
    Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart); 
    line1.XValues.DateTime = true; 
    line1.DateTimeFormat = "HH:mm:ss"; 
    cursorTool1.Series = line1; 
    line1.Stairs = true; 
    line1.XValues.DataMember = "SetTime"; 
    line1.YValues.DataMember = "Park Brk Pres Sw1"; 
    line1.DataSource = GetDataTable(); 

    tChart1.Axes.Bottom.Labels.DateTimeFormat = "HH:mm:ss"; 
    tChart1.Axes.Bottom.Labels.Style = Steema.TeeChart.AxisLabelStyle.PointValue; 
    tChart1.Export.Data.Excel.Save("C:\\Test1.xls"); 
    //Events 
    tChart1.AfterDraw += new PaintChartEventHandler(tChart1_AfterDraw); 
    cursorTool1.Change += new CursorChangeEventHandler(cursorTool1_Change); 
    tChart1.Draw(); 
} 

//DataTable 
private DataTable GetDataTable() 
{ 
    DataTable dataTable1 = new DataTable("DataSet"); 
    //Condition to filter 
    //AddColumns in new Table 
    DataColumn xval = new DataColumn("SetTime", typeof(DateTime)); 
    DataColumn yval = new DataColumn("Park Brk Pres Sw1", typeof(double)); 
    dataTable1.Columns.Add(xval); 
    dataTable1.Columns.Add(yval); 
    DateTime dt = DateTime.Now; 
    for (int i = 0; i < 10; i++) 
    { 
     DataRow newRow = dataTable1.NewRow(); 
     newRow[xval] = dt.AddSeconds(i * 5); 
     newRow[yval] = 0; 
     dataTable1.Rows.Add(newRow); 
    } 
    return dataTable1; 
} 
//Calculate Interpolate point 
private double InterpolateLineSeries(Steema.TeeChart.Styles.Custom series, int firstindex, int lastindex, double xvalue) 
{ 
    int index; 
    for (index = firstindex; index <= lastindex; index++) 
    { 
     if (index == -1 || series.XValues.Value[index] > xvalue) break; 
    } 
    // safeguard 
    if (index < 1) index = 1; 
    else if (index >= series.Count) index = series.Count - 1; 
    // y=(y2-y1)/(x2-x1)*(x-x1)+y1 
    double dx = series.XValues[index] - series.XValues[index - 1]; 
    double dy = series.YValues[index] - series.YValues[index - 1]; 
    if (dx != 0.0) return dy * (xvalue - series.XValues[index - 1])/dx + series.YValues[index - 1]; 
    else return 0.0; 
} 

private double InterpolateLineSeries(Steema.TeeChart.Styles.Custom series, double xvalue) 
{ 
    return InterpolateLineSeries(series, series.FirstVisibleIndex, series.LastVisibleIndex, xvalue); 
} 
private void cursorTool1_Change(object sender, Steema.TeeChart.Tools.CursorChangeEventArgs e) 
{ 
    xval = e.XValue; 
    ann.Text = ""; 

    this.Text = e.ValueIndex.ToString(); 
    foreach (Steema.TeeChart.Styles.Series s in tChart1.Series) 
    { 
     ann.Text += DateTime.FromOADate(s.XValues[e.ValueIndex]).ToString("HH:mm:ss"); 
    } 
} 
private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g) 
{ 
    int xs = tChart1.Axes.Bottom.CalcXPosValue(xval); 
    int ys; 
    g.Brush.Visible = true; 
    g.Brush.Solid = true; 
    for (int i = 0; i < tChart1.Series.Count; i++) 

     if (tChart1.Series[i] is Steema.TeeChart.Styles.Custom) 
     { 
      ys = tChart1.Series[i].GetVertAxis.CalcYPosValue(InterpolateLineSeries(tChart1.Series[i] as Steema.TeeChart.Styles.Custom, xval)); 
      //Draw elipse above cursor tool. 
      g.Brush.Color = tChart1.Series[i].Color; 
      //Draw annotation as label above cursor tool. 
      ann.Top = ys; 
      ann.Left = xs; 
     } 
} 

이전 코드가 문제를 해결하는 데 도움이 될 경우 알려주십시오.

희망합니다. 우리는 당신의 정확한 데이터로 작업 할 수 있기 때문에

감사합니다,