2017-02-25 1 views
1

의의 MSChart toName에서 X 축 값을 변경할 수 있습니다 어떻게나는 달의 이름을 표시하는 차트 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(); 

어떻게 차트의 Months 이름을 수정 한 다음 값을 설정할 수 있습니까?

예 :

enter image description here

+0

추가하는 x 값에 어떤 데이터 유형을 사용합니까? 실제 DataTimes입니까 ?? 그런 다음 X 축 레이블에 멋진 Fromtat 문자열을 사용할 수 있습니다. 100 % 추가하면 문자열을 추가하지 않습니다! Btw : 당신이 보여주는 그래픽이 너무 예쁘다. 나는 무엇이 쇼인지 말할 수 없다. – TaW

+0

그냥 intiger 값이 아니고, – MPERSIA

+0

이 아니지만, 나는 무엇을 할 수 있는가? – MPERSIA

답변

1

불행하게도 MSChart은 실제 표현을 허용하지 않는, 그래서 당신이 직접 달에 정수를 번역 할 수있는 방법을 볼 수 없습니다.

1) 월 문자열을 다시 가져 ..to ..

2) DateTimes 또는를 돌아 오게하기 위해 DataSource을 수정 ...이 다양한 해결 방법하지만 어떤 당신에 따라 달라집니다 선호합니다.

후자는 x 값으로 작업하지 못하게합니다.

3) DataTableDateTimes으로 수정합니다. 이것은 각 검색 후에 발생해야합니다.

4) Axis.Labels을 모두 CustomLabels으로 바꿉니다. 여기


이 해결 # 3의 예이다 :이 테이블에 새로운 열 ('DATEX')를 추가하고 DateTime.Now.Date 플러스 칼럼 'C1'의 정수로부터 계산 날짜로를 채운다. y 값은 'c2'열에 있습니다.

물론 은 현재 날짜가 아닌 DateTime 값으로 시작해야합니다. 당신은 아마 또한 IntervalTypeXValueMember유형에 대한 데이터 바인딩을 말할 필요

주의!

마지막으로 당신은 지역화 (독일어) 월 이름을 표시하기 위해 새 열을 포맷 할 수 있습니다 .. :

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); 
} 
관련 문제