繁体   English   中英

动态数据显示:更改图形的X轴日期时间格式

[英]Dynamic Data Display : Change X-Axis date time format for graph

我正在使用wpf应用程序,我正在使用动态数据显示来显示Graph。 它工作正常。

问题:

请检查一下:

在此输入图像描述

如何使用12小时时间格式而不是24小时? 请建议。

更新:

这是我的XAML图表:

 <d3:ChartPlotter Name="plotter" Margin="3,121,5,0" Grid.RowSpan="2" Height="373" VerticalAlignment="Top" VerticalContentAlignment="Stretch" LegendVisible="False">
    <d3:ChartPlotter.HorizontalAxis>
        <d3:HorizontalDateTimeAxis Name="dateAxis" />                                    
    </d3:ChartPlotter.HorizontalAxis>                                                               
    <d3:VerticalAxisTitle FontFamily="Georgia" Content="Sensor Readings" />
    <d3:HorizontalAxisTitle FontFamily="Georgia" Content="Date" />
</d3:ChartPlotter>

CS:

var dates = (from dr in datDs.Tables[0].AsEnumerable()
                 select new
                 {
                     date = dr.Field<DateTime>("DateRecorded")
                 }.date).ToList();

var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));

要更改DateTime Axis应用格式的方式,您必须进入D3的源代码。 在文件中... DynamicDataDisplay / Charts / Axes / DateTime / DateTimeLabelProviderBase.cs

您将不得不更改GetDateFormat方法。 以下是将产生您想要的结果的示例:

protected virtual string GetDateFormat(DifferenceIn diff)
    {
        string format = null;

        switch (diff)
        {
            case DifferenceIn.Year:
                format = "yyyy";
                break;
            case DifferenceIn.Month:
                format = "MMM";
                break;
            case DifferenceIn.Day:
                format = "%d";
                break;
            case DifferenceIn.Hour:
                format = "hh:mm";
                break;
            case DifferenceIn.Minute:
                format = "%m";
                break;
            case DifferenceIn.Second:
                format = "ss";
                break;
            case DifferenceIn.Millisecond:
                format = "fff";
                break;
            default:
                break;
        }

        return format;
    }

关键是将小时的情况从大写字母H(24小时时间)改为小写字母h(12小时时间)。 希望这会对您的图表项目的其余部分有所帮助,并祝您好运!

在这里您可以找到一个很好的用法示例:

http://msdn.microsoft.com/en-us/magazine/ff714591.aspx

我认为这可以帮助你:

在x轴上,我使用ConvertToDouble方法将DateTime数据显式转换为double类型。 在y轴上,我简单地写了y => y(读作“y转到y”)以隐式地将输入int y转换为输出double y。 我可以通过编写SetYMapping(y => Convert.ToDouble(y))明确我的类型映射。我对lambda表达式参数的x和y的选择是任意的 - 我可以使用任何参数名称。

和代码:

var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));

动态数据显示将DateTime与您的应用程序文化结合使用。 所以(由提到weston ),你必须将其设置为与cultere 12 hour time format 本文介绍了如何执行此操作:

如何在WPF应用程序中全局设置文化?

编码:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

试试这个:(c#,DevExpress)

((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;
((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM