如何将 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);
}
我想更改图表 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);
}