如何编辑ASP.NET图表的X轴标签以仅显示日期而不显示时间。

3

enter image description here

如何从我的图表的X轴中删除时间。 我的SQL仅返回日期,但我的代码再次添加了时间。

我尝试过:

Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "##-##-##";

但没有成功。

我的当前代码:

            Chart1.Visible = ddlChart.SelectedValue != "";
            string query = string.Format(stest);
            DataTable dt = GetData(query);
            string[] x = new string[dt.Rows.Count];
            int[] y = new int[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                x[i] = dt.Rows[i][0].ToString();
                y[i] = Convert.ToInt32(dt.Rows[i][1]);
            }
            Chart1.Series[0].Points.DataBindXY(x, y);

            Chart1.Series[0].ChartType = SeriesChartType.Bar;
            Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
            Chart1.Legends[0].Enabled = true;

可运行的代码 - 感谢 jstreet

Chart1.Visible = ddlChart.SelectedValue != "";
            string query = string.Format(stest);
            DataTable dt = GetData(query);

            DateTime[] x = new DateTime [dt.Rows.Count];
            int[] y = new int[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                x[i] = Convert.ToDateTime(dt.Rows[i][0]);
                y[i] = Convert.ToInt32(dt.Rows[i][1]);
            }
            Chart1.Series[0].Points.DataBindXY(x, y);

            Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM-dd-yyyy";

            Chart1.Series[0].ChartType = SeriesChartType.Bar;

            Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;

            Chart1.Legends[0].Enabled = true;

@jstreet 如果方向改变,那么轴也会改变吗?因此,您是说在这个水平条形图中,X轴变为垂直,Y轴变为水平? - MattB
@MattB 你是问什么方向? - jsanalytics
2个回答

3
在柱形图(对于条形图而言),垂直轴是 AxisX,而不是 AxisY。同时,请避免将字符串分配给 AxisX,这并非必需,并可能会引起问题。
请使用以下代码:
Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM-dd-yyyy";

或者这样:
Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM-dd-yy";

在这里输入图片描述

编辑:

这是一些示例代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        DateTime[] x = new DateTime[3];
        int[] y = new int[3];

        for (int i = 0; i < 3; i++)
        {
            x[i] = DateTime.Now.AddDays(i);
            y[i] = 10 * (i + 1);
        }
        Chart1.Series[0].Points.DataBindXY(x, y);
        Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM-dd-yy";
    }

在我的for循环之后尝试了上述方法,但没有成功。 - Ruan
你的表存储的是什么数据类型? - jsanalytics
“DateTime.”。这就是为什么你不应该将DateTime转换为字符串,不确定在for循环中该怎么办。 - Ruan
只需将DateTime直接分配给您的AxisX,无需进行任何转换为string - jsanalytics
请查看我的 编辑 - jsanalytics

0

以下内容应该可以正常工作

 for (int i=0; i < dt.Rows.Count; i++)
 {
     DataRow row = dt.Rows[i];
     x[i] = DateTime.ParseExact(row[0].ToString(), 'MM-dd-yy', CultureInfo.InvariantCulture);
     y[i] = Convert.ToInt32(row[1]);
 }

我应该在哪里添加上述代码呢?肯定不是在for循环中,因为ToShortDateString没有定义。而在for循环之外,也没有i的上下文。 - Ruan
@Ruan 我会在for循环内部更改它们,因为那是你进行原始ToString()调用的地方。我的假设是dt.Rows[i][0]是你的DateTime值,对吗? - MattB
x[i] = dt.Rows[i][0].ToShortDateString("MM-dd-yy"); 给我一个错误:'object' does not contain a definition for 'ToShortDateString' and no extension method 'ToShortDateString' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) - Ruan
我看到了问题,您需要获取这样的行 DataRow row = dt.Rows[i] 然后您需要按名称调用属性并设置它 row["DateProperty"] = (DateTime)row["DateProperty"].ToShortDateString("MM-dd-yy") - MattB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接