Erik Posted May 9, 2007 Report Share Posted May 9, 2007 I'm staring with data from SQL server and displaying a chart that has SQL DateTime as the x axis. string dataQueryString = "Select * from dbo.Data;"; dataCommand = new SqlCommand(dataQueryString, connection); dataAdapter = new SqlDataAdapter(dataCommand); System.Data.DataSet dataDS = new System.Data.DataSet(); dataAdapter.Fill(dataDS, "Data"); Chart1.DataSourceSettings.Fields.Add(new FieldMap("date", FieldUsage.XValue)); Chart1.DataSourceSettings.Fields.Add(new FieldMap("rValue", FieldUsage.Value)); Chart1.DataSource = dataDS.Tables[0]; This works fine and the x axis has the correct date values (e.g. 1/1/2000, 1/2/2000, etc). I then do some processing based on user input, create a DataTable with the new values and then re-display the chart with the new DataTable. At this point I can no longer get the x axis to understand it is a date. If I just copy the date values from the old table to the new I get the following error. Input string was not in a correct format. at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) at System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info) at ChartFX.WinForms.DataSourceSettings.a(TypeCode A_0, Object A_1) at ChartFX.WinForms.DataSourceSettings.a(IDataEx A_0, FieldMapCollection A_1, PropertyDescriptorCollection A_2, b A_3, Boolean A_4) at ChartFX.WinForms.DataSourceSettings.a() at ChartFX.WinForms.DataSourceSettings.e() at ChartFX.WinForms.DataSourceSettings.set_DataSource(Object value) at ChartFX.WinForms.Chart.set_DataSource(Object value) I can fix this by converting the date into a double value serial date like excel uses (e.g. 12/15/2005 = 38701.00) but that is of course just a numeric value and the x axis no longer displays as a date. Any ideas? Link to comment Share on other sites More sharing options...
JuanC Posted May 9, 2007 Report Share Posted May 9, 2007 When you say "and then re-display the chart with the new DataTable" are you doing this in a new chart? Are you creating a date-time column in your new DataTable? If the new table's column is not named "date" you may have to clear the fields collection and setup new FieldMaps. Also I would recommend you try setting the X axis format as follows chart1.AxisX.LabelsFormat.Format = AxisFormat.DateTime This might help if you try using double numbers (note that we currently use .ToOADate and but this might change in future versions). Regards, JuanC Link to comment Share on other sites More sharing options...
Erik Posted May 9, 2007 Author Report Share Posted May 9, 2007 I was using the same chart. It works both ways you suggested Changing either benchmarkTable.Columns[0].DataType = typeof(DateTime); and use at DateTime object in the row or Chart1.AxisX.LabelsFormat.Format = AxisFormat.DateTime; and use the the .ToOADate on the DateTime object. Thanks for your help! Erik Link to comment Share on other sites More sharing options...
Frank Posted May 9, 2007 Report Share Posted May 9, 2007 The key here is " create a DataTable ". You must be creating this DataTable incorrectly. Make sure you give a type to each column, otherwise the default type is string. Link to comment Share on other sites More sharing options...
perry3819 Posted May 10, 2007 Report Share Posted May 10, 2007 Since ToOADate is used, am I out of luck if my DateTime precision is at the millisecond level? Thanks, Perry Link to comment Share on other sites More sharing options...
JuanC Posted May 10, 2007 Report Share Posted May 10, 2007 Internally we use ToOADate and FromOADate when handling dates so if you need to create a chart with precision at the millisecond level, you will have to 1) use doubles in the X axis, using a different conversion method, e.g. you could use .ToFileTimeUTC 2) turn on the Notify property in the X axis and process the chart's GetAxisLabel event, in this event you will return a string e.g. using .FromFileTimeUTC 3) By doing this you will have to manually set your steps, I am guessing that in a chart where milliseconds are important you will typically display less than a date worth of data so losing our "auto steps" calculation will not be a substantial loss in this scenario. Regards, JuanC Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.