2017-02-25 72 views
1

如何可以改变X轴值在MSChart的toName我想改变图表X轴值显示月名月

例如:1 => 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(); 

以及如何解决图表中的月名,然后设置其值?

例子:

enter image description here

+0

您使用哪种数据类型来添加x值?他们真的是DataTimes?然后,只有到那时,你可以用一个漂亮的Fromtat字符串x轴的标签。使100%你不添加他们添加字符串!顺便说一句:你显示的图形看起来太烦了,我不知道是什么显示.. – TaW

+0

其只是intiger值,没有 – MPERSIA

+0

但它很清楚,那我能做什么? – MPERSIA

回答

1

不幸的是MSChart不允许任何真正的表情,所以我不明白你怎么可以直接整数转换到几个月。

有各种不同的解决方法,但你更喜欢将取决于你..

1)修改DataSource带回DateTimes或..

2)..to带回月份字符串。

后者将阻止你与X值的工作。

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

4)由CustomLabels更换Axis.Labels完全。


这里是解决方法#3的例子:它增加了一个新的列(“DATEX”)表中,并与来自DateTime.Now.Date在列“C1”的整数计算日期填充。 y值在列'c2'中。

当然应该使用合适的起始DateTime价值,而不是现在的日期!

请注意,您需要告知数据绑定关于类型XValueMember,也许还有IntervalType

最后,你可以格式化新栏,显示本地化(德语)本月名称..:波斯月名称

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; 

enter image description here

+0

非常感谢您的主人 – MPERSIA

0

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); 
}