2016-01-31 1 views
0

Привет, извините, что беспокою всех снова. Может кто-нибудь, пожалуйста, взгляните на мой код и исправьте меня? Я не могу добиться результата, которого хочу в image in 3). В моей диаграмме отображается только 1/3 из условий счета. Как я могу изменить следующую строку, чтобы я мог прочитать все условия подсчета для отображения изображения в 3)?Почему следующая круговая диаграмма отображает только 1/3 состояния счета sql?

private void BindChart() 
{ 
    string query3 = string.Format("select count(case when tempValue < 24 then 1 end) as Cold, count(case when tempValue between 24 and 30 then 1 end) as Warm, count(case when tempValue > 30 then 1 end) as Hot FROM Datacentre"); 
    DataTable dt = GetData3(query3); 

    string[] x = new string[] { "< 24 Degrees", "24 - 30 Degrees", "> 30 Degrees" }; 
    foreach (DataRow row in dt.Rows) 
    { 
     foreach (var value in x) 
     { 
      PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
      { 
       Category = value, 
       Data = Convert.ToDecimal(row["Cold"]) //reads 3 objects 
      });//PROBLEM: but only displays total count of 18 for everything 
     } 
    } 

    this.PieChart1.Enabled = true; 
    this.PieChart1.Visible = true; 
    this.PieChart1.DataBind(); 
} 

1) Вот что я извлекаться:

enter image description here

2) Вот мой выходной график:

enter image description here

3) Это в результате чего я хочу:

enter image description here

ответ

2

Проблема в том, что в вашем коде, вы жёстко «холодный»:

Data = Convert.ToDecimal(row["Cold"]) //reads 3 objects 

И, вы пробегаем по разным строкам, но у вас есть только одна строка:

foreach (DataRow row in dt.Rows) 

Если у вас есть только одна строка возвращения из вашего запроса, и у вас есть только три категории, вы могли бы написать это по-разному:

data = dt.Rows[0] 
PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
     { 
      Category = "< 24 Degrees", 
      Data = Convert.ToDecimal(row["Cold"]) 
     }); 
PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
     { 
      Category = "24 - 30 Degrees", 
      Data = Convert.ToDecimal(row["Warm"]) 
     }); 
PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
     { 
      Category = "> 30 Degrees", 
      Data = Convert.ToDecimal(row["Hot"]) 
     }); 

В качестве альтернативы можно использовать цикл, но это предполагает, что три столбца в наборе данных являются таким же порядком, как эти три элемента в массиве х:

var x = new string[] { "< 24 Degrees", "24 - 30 Degrees", "> 30 Degrees" }; 
var row = dt.Rows[0] 
for(var i=0; i < x.Length;i++) 
{ 
    PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
     { 
      Category = x[i], 
      Data = Convert.ToDecimal(row[i]) 
     }); 
    } 
} 

Для того чтобы действительно сделать это родовым, вам может переписать запрос для возврата строк для каждого набора данных с вашей категорией и ценностями в виде столбцов:

Category  Value 
-------------------- 
< 24 Degrees  18 
24 - 30 Degrees 67 
> 30 Degrees  2 

и тогда вы могли бы Переберите каждую строку:

foreach (DataRow row in dt.Rows) 
{ 
    PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
     { 
      Category = row["Category"], 
      Data = Convert.ToDecimal(row["Value"]) 
     }); 
    } 
} 

Для этого потребуется немного более сложный запрос (см. here, но тогда базовый код, который показывает круговую диаграмму, может быть общим для любых создаваемых круговых диаграмм.

+0

большое спасибо за помощь! вы дали довольно подробный ответ. мне нравится этот. голосов. – BlueTree

2

Вы только читаете холодную часть результата возвращается. SQL возвращает только одну строку, поэтому вам нужно прочитать каждый столбец, в настоящее время вы читаете только столбец Cold.

for (var i=0; i < x.Length;i++) 
    { 
     PieChart1.PieChartValues.Add(new AjaxControlToolkit.PieChartValue 
     { 
      Category = value, 
      Data = Convert.ToDecimal(row[i]) //reads 3 objects 
     });//PROBLEM: but only displays total count of 18 for everything 
    } 
Смежные вопросы