C# 为什么下面的饼图只显示sql计数条件的1/3?

C# 为什么下面的饼图只显示sql计数条件的1/3?,c#,sql,asp.net,ajaxcontroltoolkit,pie-chart,C#,Sql,Asp.net,Ajaxcontroltoolkit,Pie Chart,嗨,很抱歉再次打扰大家。有人能看一下我的代码并纠正我吗?在3)中的图像中,我似乎无法达到我想要的结果。我的图表仅显示计数条件的1/3。如何修改下一行,以便读取所有计数条件以显示3)中的图像 private void BindChart() { string query3=string.Format(“从数据中心选择count(当tempValue30时,案例1结束)作为Hot”); DataTable dt=GetData3(查询3); 字符串[]x=新字符串[]{“

嗨,很抱歉再次打扰大家。有人能看一下我的代码并纠正我吗?在3)中的图像中,我似乎无法达到我想要的结果。我的图表仅显示计数条件的1/3。如何修改下一行,以便读取所有计数条件以显示3)中的图像

private void BindChart()
{
string query3=string.Format(“从数据中心选择count(当tempValue<24时,案例1结束)作为Cold,count(当tempValue介于24和30之间时,案例1结束)作为Warm,count(当tempValue>30时,案例1结束)作为Hot”);
DataTable dt=GetData3(查询3);
字符串[]x=新字符串[]{“<24度”,“24-30度”,“30度”};
foreach(数据行中的数据行)
{
foreach(x中的var值)
{
添加(新的AjaxControlToolkit.PieChartValue
{
类别=价值,
Data=Convert.ToDecimal(行[“Cold”])//读取3个对象
});//问题:但只显示所有项的总数为18
}
}
this.PieChart1.Enabled=true;
this.piechart 1.Visible=true;
这个.PieChart1.DataBind();
}
1)以下是我检索到的内容:

2)这是我的图表输出:

3)这就是我想要的结果:


您只读取返回结果的冷部分。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
    }
for(变量i=0;i
您只读取返回结果的冷部分。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
    }
for(变量i=0;i
问题在于,在代码中,您硬编码了“cold”:

并且,您在不同的行之间循环,但您只有一行:

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"])
        });

这将需要一个更复杂的查询(请参阅,但是显示饼图的底层代码可能对于您创建的任何饼图都是通用的。

问题是,在您的代码中,您硬编码了“cold”:

并且,您在不同的行之间循环,但您只有一行:

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"])
        });

这将需要更复杂的查询(请参阅,但是显示饼图的底层代码对于您创建的任何饼图都可能是通用的。

非常感谢您的帮助!您给出了非常详细的答案。我喜欢这个。投票。非常感谢您的帮助!您给出了非常详细的答案。我喜欢这个。投票。
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"])
        });
    }
}