net moneda formato custom asp.net formatting mschart axis-labels

asp.net - moneda - format vb net



El control de gráfico ASP.NET establece los nombres de mes del valor int en las etiquetas X Axis (1)

Quiero reemplazar los números (1, 2, 3, ...) en el eje X de la tabla con el nombre del mes correspondiente.

Esta es mi carta real:

En el DataView que rellena la Series , tengo la columna "MES" que contiene valores del 1 al 12. También tuve que configurar manualmente el valor Minimum y Maximum en 0 y 13, de lo contrario, pierdo la primera y la última columna debido a una falta de espacio entre el comienzo de la primera columna del eje X y el eje Y y entre el último final de la columna del eje X del área del gráfico.

<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>

Entonces, si reemplazo los valores int por nombres de mes, también necesito eliminar los parámetros Min y Max, pero quiero mantener el espacio como está ahora.

Intenté con algunas soluciones sugeridas aquí y en todas partes, pero sin resultados. El más fácil, más efectivo e inmediato parecía ser este:

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

pero no funciona. En cambio, obtengo una cadena "MMM" en lugar de los valores enteros.

¿Es posible interceptar el evento DataBind como en un GridView, para reemplazar los valores enteros por nombres de mes?


Creo que debes usar etiquetas personalizadas. Usé esto y esto .

El código detrás:

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 = ""; } } } }

Salida:

Debe asignar el evento Personalizar.