2017-02-05 12 views
1

Я не могу изменить цвет для каждого datapoint соответственно.Настройка диаграммы ASP.NET DataPoint на основе состояния

Состояние есть, если номер < = 10, цвет будет красным. если число> 10, цвет будет зеленым.

коды (я попробовать использовать цикл Еогеасп затем цикл, но безрезультатно ..) Пожалуйста, просто посмотрите на // Доступно:

 ChartClass.Series.Clear(); 

     BedsBLL get = new BedsBLL(); 

     int A1Available = get.countAvailA1(); 
     int A1Alloted = get.countUnavailA1(); 
     int B1Available = get.countAvailB1(); 
     int B1Alloted = get.countUnavailB1(); 
     int B2Available = get.countAvailB2(); 
     int B2Alloted = get.countUnavailB2(); 
     int C1Available = get.countAvailC1(); 
     int C1Alloted = get.countUnavailC1(); 

     //Available 
     Series seriesAvail = ChartClass.Series.Add("SeriesAvailable"); 
     seriesAvail.Color = Color.ForestGreen; 
     seriesAvail.LegendText = "Available Number of Beds"; 

     String[] classArrAvail = { "A1", "B1", "B2", "C1" }; 
     int[] countAvailable = { A1Available, B1Available, B2Available, C1Available }; 

     ChartClass.Series["SeriesAvailable"].Points.DataBindXY(classArrAvail, countAvailable); 

     ChartClass.Series["SeriesAvailable"].YValuesPerPoint = 2; 

     foreach (DataPoint pt in ChartClass.Series["SeriesAvailable"].Points) 
     { 
      if (pt.XValue <= 10) 
      { 
       pt.Color = Color.Red; 
      } 
      else if (pt.XValue > 10) 
      { 
       pt.Color = Color.ForestGreen; 
      } 

      /*for (int i = 0; i < countAvailable.Length; i++) 
      { 
       if (countAvailable[i] <= 10) 
       { 
        pt.Color = Color.Red; 
       } 
       else if (countAvailable[i] > 10) 
       { 
        pt.Color = Color.ForestGreen; 
       } 
      }*/ 
     } 

     //Alloted 
     Series seriesAlloted = ChartClass.Series.Add("SeriesAlloted"); 
     seriesAlloted.Color = Color.Gray; 
     seriesAlloted.LegendText = "Alloted Number of Beds"; 

     String[] classArrAlloted = { "A1", "B1", "B2", "C1" }; 
     int[] countAlloted = { A1Alloted, B1Alloted, B2Alloted, C1Alloted }; 

     ChartClass.Series["SeriesAlloted"].Points.DataBindXY(classArrAlloted, countAlloted); 

enter image description here

Дизайнер:

   <asp:Chart ID="ChartClass" runat="server" Height="350px" Width="380px"> 
       <Series> 
        <asp:Series Name="SeriesAvailable" IsValueShownAsLabel="True" LabelAngle="-90" Font="Microsoft Sans Serif, 12pt" Legend="LegendClass" ChartArea="ChartAreaClass" ChartType="StackedColumn"> 
         <SmartLabelStyle Enabled="false" /> 
        </asp:Series> 
        <asp:Series Name="SeriesAlloted" IsValueShownAsLabel="True" LabelAngle="-90" Font="Microsoft Sans Serif, 12pt" Legend="LegendClass" ChartArea="ChartAreaClass" ChartType="StackedColumn"> 
         <SmartLabelStyle Enabled="false"/> 
        </asp:Series> 
       </Series> 
       <ChartAreas> 
        <asp:ChartArea Name="ChartAreaClass"> 
         <AxisX Title="Class"> 
          <MajorGrid Enabled="false" /> 
         </AxisX> 
         <AxisY Title="Number of Beds"> 
          <MajorGrid Enabled="false" /> 
         </AxisY> 
        </asp:ChartArea> 
       </ChartAreas> 
       <Legends> 
        <asp:Legend Docking="Bottom" Name="LegendClass"></asp:Legend> 
       </Legends> 
       <Titles> 
        <asp:Title Name="TitleChart" Font="Microsoft Sans Serif, 15pt, style=Bold" Text="Beds Statistics Summary (Class)" Alignment="TopCenter"></asp:Title> 
       </Titles> 
       </asp:Chart> 
+0

Я отвечал на подобный вопрос, принять посмотрите [ЗДЕСЬ] (http://stackoverflow.com/questions/3880 7084 /, как в настройке-Asp-нетто-чарт-привязкой к данным к SqlDataSource/38811378 # 38811378). – jsanalytics

+0

Но почему мне нужен случайный? Mine основывается на условии, а затем меняет цвет этого datapoint, который удовлетворяет этому условию. Извините, я как бы потерян. Я только сделал 2 диаграммы до тех пор, пока я начал asp.net. @jstreet – domster

+0

Вы не знаете, t нужно случайное. Вам просто нужно обработать событие «PreRender». Но теперь я вижу, что вы явно добавляете свои точки данных (а не из базы данных, как в моем примере), поэтому, возможно, вам не нужно даже это ... Используйте отладчик, чтобы убедиться, что цикл, изменяющий цвет, работает правильно , – jsanalytics

ответ

2

Ваша петля для установки цвета неверна. Вот как вы должны это сделать:

public partial class WebForm1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string[] classArrAvail = { "A1", "B1", "B2", "C1" }; 
     int[] countAvailable = { 20, 5, 10, 15 }; 

     Chart1.Series["SeriesAvailable"].Points.DataBindXY(classArrAvail, countAvailable); 

     foreach (DataPoint pt in Chart1.Series["SeriesAvailable"].Points) 
     { 
      if (pt.YValues[0] <= 10) 
       pt.Color = Color.Red; 
      else pt.Color = Color.Green; 
     } 
    } 
} 

enter image description here


EDIT: Добавление ASPX для меток столбцов:

<asp:Chart ID="Chart1" runat="server" Height="400px" Width="600px"> 
     <series> 
      <asp:Series Name="SeriesAvailable" Font="Microsoft Sans Serif, 12pt" IsValueShownAsLabel="True" LabelAngle="-90"> 
       <SmartLabelStyle Enabled="False" /> 
      </asp:Series> 
     </series> 
     <chartareas> 
      <asp:ChartArea Name="ChartArea1"> 
       <AxisX> 
        <MajorGrid Enabled="False" /> 
       </AxisX> 
      </asp:ChartArea> 
     </chartareas> 
    </asp:Chart> 

enter image description here

+0

Что делать, если я использую [«SeriesAvailable»] для if if? а также .. Chart1.Series ["SeriesAvailable"]. Points.DataBindXY (classArrAvail, countAvailable); Спасибо .. – domster

+0

Вместо этого я использовал [0]. Не могли бы вы исправить меня, если я ошибаюсь. 0 представляет собой первую серию, которую вы добавили в своем дизайнере в своей диаграмме. 1 представляет собой вторую серию, которую вы добавили. Итак, и т. Д. @jstreet – domster

+0

Вы можете просто сохранить название своей серии. Я использую '[0]' только потому, что я не назвал свою серию в моем примере. – jsanalytics