2017-02-25 116 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); 
}