2014-03-14 1 views
3

차트의 X 축에있는 숫자 (1, 2, 3, ...)를 해당 월 이름으로 바꿉니다. Series은 내가 수동으로 Minimum을 설정했다 (12) 1에서 값을 포함하는 "MONTH"열을 채우는 DataViewASP.NET 차트 컨트롤에서 X 축 레이블의 int 값에서 월 이름을 설정합니다

Actual chart

:

이 내 실제 차트 및 Maximum 값을 0과 13, 그렇지 않으면 첫 번째 X 축 열 및 Y 축 시작 부분과 차트 영역의 마지막 X 축 열 끝 사이에 공백이 부족하여 첫 번째 및 마지막 열 손실됩니다. 나는 달의 이름으로 INT 값을 대체 할 경우

<ChartAreas> 
    <asp:ChartArea Name="ChartArea1"> 
     <AxisX IsStartedFromZero="True" Title="Mese" 
      TitleFont="Segoe UI, 10pt, style=Bold" IsLabelAutoFit="False" LineColor="Gray" 
      Minimum="0" Maximum="13"> 
      <MajorGrid LineColor="LightGray" /> 
      <LabelStyle Font="Segoe UI, 9pt" /> 
     </AxisX> 
    </asp:ChartArea> 
</ChartAreas> 

그래서, 나는 또한 최소 및 최대 매개 변수를 제거해야하지만, 지금처럼이 공간을 유지하려는.

여기에 나와있는 해결책을 시도했지만 아무런 결과가 없습니다. 가장 쉬운, 가장 효과적이고 즉각적인이 될 듯 :

Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MMM"; 

을했지만 작동하지 않습니다. 대신 정수 값 대신 "MMM"문자열을 얻습니다.

정수 값을 월 이름으로 바꾸려면 GridView에서 DataBind 이벤트를 가로채는 것이 가능합니까?

답변

6

맞춤 라벨을 사용해야한다고 생각합니다. 나는 thisthis을 사용했습니다. 뒤에

코드 :

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebTest_1 
{ 
    public partial class _Default : Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      Chart1.Series[0].Points.AddXY(1, 83); 
      Chart1.Series[0].Points.AddXY(2, 63); 
      Chart1.Series[0].Points.AddXY(3, 53); 
      Chart1.Series[0].Points.AddXY(4, 77); 
      Chart1.Series[0].Points.AddXY(5, 46); 
      Chart1.Series[0].Points.AddXY(6, 99); 
      Chart1.Series[0].Points.AddXY(7, 72); 
      Chart1.Series[0].Points.AddXY(8, 39); 
      Chart1.Series[0].Points.AddXY(9, 42); 
      Chart1.Series[0].Points.AddXY(10, 71); 
      Chart1.Series[0].Points.AddXY(11, 58); 
      Chart1.Series[0].Points.AddXY(12, 63); 

      Chart1.Series[1].Points.AddXY(1 , 46); 
      Chart1.Series[1].Points.AddXY(2 , 72); 
      Chart1.Series[1].Points.AddXY(3 , 53); 
      Chart1.Series[1].Points.AddXY(4 , 39); 
      Chart1.Series[1].Points.AddXY(5 , 63); 
      Chart1.Series[1].Points.AddXY(6 , 71); 
      Chart1.Series[1].Points.AddXY(7 , 75); 
      Chart1.Series[1].Points.AddXY(8 , 99); 
      Chart1.Series[1].Points.AddXY(9 , 83); 
      Chart1.Series[1].Points.AddXY(10, 63); 
      Chart1.Series[1].Points.AddXY(11, 58); 
      Chart1.Series[1].Points.AddXY(12, 42); 
     } 

     protected void Chart1_Customize(object sender, EventArgs e) 
     { 
      foreach (var lbl in Chart1.ChartAreas[0].AxisX.CustomLabels) 
      { 
       int monthNumber = int.Parse(lbl.Text); 
       if (monthNumber >= 1 && monthNumber <= 12) 
        lbl.Text = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(monthNumber); 
       else 
        lbl.Text = ""; 
      } 
     } 
    } 
} 

출력 :

enter image description here

당신은 사용자 정의 이벤트를 할당해야합니다.

+0

고맙습니다. 작동합니다! 어쨌든 좀 더 우아한 해결책이었던'Chart1.ChartAreas [0] .AxisX.LabelStyle.Format' 속성을 사용할 수 있다고 생각했습니다. –

+0

실제 DateTime 값 ([like this] (http://stackoverflow.com/q/15907556/1974021))이있는 경우 아마도 그럴 수 있습니다. –

+0

다른 솔루션을 시도하고 새로운 결과로이 질문을 업데이트했습니다. 좀 봐 주시겠습니까? –

관련 문제