如何将 MSChart 中的 X 轴值更改为月份名称

How Can Alter X Axis Values In MSChart toName of Months

我想更改图表 X 轴值以显示月份名称

例如:1 => 一月,2 => 二月等

        DataTable dt = new DataTable();
        SqlCommand s = new SqlCommand("ReportMonthly", SCon);
        s.CommandType = CommandType.StoredProcedure;
        s.Parameters.AddWithValue("@Year", Year);
        SCon.Open();
        SqlDataReader dr = s.ExecuteReader();
        dt.Load(dr);
        chtWRMonthly.DataSource = dt;
        chtWRMonthly.Series["Sold"].XValueMember = "Month";
        chtWRMonthly.Series["sRemaining"].XValueMember = "Month";
        chtWRMonthly.Series["Bought"].XValueMember = "Month";
        chtWRMonthly.Series["bRemaining"].XValueMember = "Month";
        chtWRMonthly.Series["Sold"].YValueMembers = "sTAccount";
        chtWRMonthly.Series["sRemaining"].YValueMembers = "sRemaining";
        chtWRMonthly.Series["Bought"].YValueMembers = "bTAccount";
        chtWRMonthly.Series["bRemaining"].YValueMembers = "bRemaining";
        SCon.Close();

以及如何固定图表中月份的名称然后设置它们的值?

示例:

不幸的是 MSChart 不允许任何实数表达式,所以我不知道如何将整数直接转换为月份。

有多种解决方法,但您喜欢哪种取决于您自己。

1) 修改 DataSource 以恢复 DateTimes 或..

2) ..恢复月份字符串。

后者将阻止您使用 x 值。

3) 修改DataTable以包含DateTimes;这必须在每次检索后发生。

4) 将 Axis.Labels 完全替换为 CustomLabels.


这是解决方法 #3 的示例:它向 table 添加一个新列 ('dateX') 并用根据 DateTime.Now.Date 计算的日期填充它加上 列中的整数 'c1'。 y 值位于 'c2'.

列中

当然 应该使用 suitable 起始 DateTime 值,而不是当前日期!

请注意,您需要将 XValueMember 类型 以及 IntervalType!

的类型告知数据绑定

最后,您可以格式化新列以显示本地化(德语)月份名称..:[=​​23=]

if (!DT.Columns.Contains("dateX")) DT.Columns.Add("dateX", typeof(DateTime));

foreach (DataRow row in DT.Rows)
    row.SetField<DateTime>("dateX", DateTime.Now.Date.AddMonths(row.Field<int>("c1")));


Series s = chart1.Series[0];
s.XValueMember = "dateX";
s.XValueType = ChartValueType.DateTime;
s.YValueMembers = "c2";

chart1.DataSource = DT;
chart1.DataBind();

Axis ax = chart1.ChartAreas[0].AxisX;
ax.LabelStyle.Format = "MMMM" ;
ax.IntervalType = DateTimeIntervalType.Months;
ax.Interval = 1;

波斯语月份名称

    Dictionary<string, string> MonthsDic = new Dictionary<string, string>();
                MonthsDic.Add("1", "فروردین");
                MonthsDic.Add("2", "اردیبهشت");
                MonthsDic.Add("3", "خرداد");
                MonthsDic.Add("4", "تیر");
                MonthsDic.Add("5", "مرداد");
                MonthsDic.Add("6", "شهریور");
                MonthsDic.Add("7", "مهر");
                MonthsDic.Add("8", "آبان");
                MonthsDic.Add("9", "آذر");
                MonthsDic.Add("10", "دی");
                MonthsDic.Add("11", "بهمن");
                MonthsDic.Add("12", "اسفند");

///
private void LoadMonthlyReport()
{
DataTable dt = new DataTable();
            SqlCommand s = new SqlCommand("ReportMonthly", SCon);
            s.CommandType = CommandType.StoredProcedure;
            s.Parameters.AddWithValue("@Year", Year);
            SCon.Open();
            SqlDataReader dr = s.ExecuteReader();
            dt.Load(dr);            
            dt.Columns.Add("MonthName", typeof(string));
            foreach (DataRow d in dt.Rows)
            {
                switch (d["Month"].ToString())
                {
                    case "1":
                        d["MonthName"] = "فروردین";
                        break;
                    case "2":
                        d["MonthName"] = "اردیبهشت";
                        break;
                    case "3":
                        d["MonthName"] = "خرداد";
                        break;
                    case "4":
                        d["MonthName"] = "تیر";
                        break;
                    case "5":
                        d["MonthName"] = "مرداد";
                        break;
                    case "6":
                        d["MonthName"] = "شهریور";
                        break;
                    case "7":
                        d["MonthName"] = "مهر";
                        break;
                    case "8":
                        d["MonthName"] = "آبان";
                        break;
                    case "9":
                        d["MonthName"] = "آذر";
                        break;
                    case "10":
                        d["MonthName"] = "دی";
                        break;
                    case "11":
                        d["MonthName"] = "بهمن";
                        break;
                    case "12":
                        d["MonthName"] = "اسفند";
                        break;
                }
            }
            chtWRMonthly.DataSource = dt;
            chtWRMonthly.Series["Sold"].XValueMember = "MonthName";
            chtWRMonthly.Series["sRemaining"].XValueMember = "MonthName";
            chtWRMonthly.Series["Bought"].XValueMember = "MonthName";
            chtWRMonthly.Series["bRemaining"].XValueMember = "MonthName";
            chtWRMonthly.Series["Sold"].YValueMembers = "sTAccount";
            chtWRMonthly.Series["sRemaining"].YValueMembers = "sRemaining";
            chtWRMonthly.Series["Bought"].YValueMembers = "bTAccount";
            chtWRMonthly.Series["bRemaining"].YValueMembers = "bRemaining";
            SCon.Close();
}

//获取月数并发送至sql

    private void chtWRMonthly_MouseClick(object sender, MouseEventArgs e)
{
string MonthName = "";
            Boolean S = true;
            Point MP = new Point(e.X);
            chtWRMonthly.ChartAreas[0].CursorX.Interval = 0;
            int X, Px = (int)chtWRMonthly.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
            X = (int)Math.Round((float)chtWRMonthly.ChartAreas[0].AxisX.PixelPositionToValue(e.X)) - 1;
            MonthName = chtWRMonthly.Series[0].Points[X].AxisLabel;
            if (MonthName != "")
            {
                if (Px >= X+1)
                    S = false;

                SqlDataAdapter SDA = new SqlDataAdapter("ReportMonthlyShowInvoices", SCon);
                SDA.SelectCommand.CommandType = CommandType.StoredProcedure;
                SDA.SelectCommand.Parameters.AddWithValue("@Year", Year);
                SDA.SelectCommand.Parameters.AddWithValue("@Month", MonthsDic.First(Pair => Pair.Value == MonthName).Key);
                SDA.SelectCommand.Parameters.AddWithValue("@S", S);
                DataTable DT = new DataTable();
                SDA.Fill(DT);
}