Как мне связать круговую диаграмму в списке данных - PullRequest
0 голосов
/ 16 мая 2018

У меня есть следующие результирующие данные, поступающие из таблиц SQL Server

Product_ID  Unit_Type  Product_Pic    TotalUnique   TotalFail  Yield
1           Lawn Mower Lawnmower.jpg  470           27         94.25
2           Bicycle    Bicycle.jpg    5             1          80
3           Tractor    Tractor.jpg    0             0          100
5           Blender    Blender.jpg    360           12         96.66
6           Fridge     Fridge.jpg     11            6          94.59

У меня есть список данных, который показывает каждый продукт с заданной информацией.Я хочу добавить простую круговую диаграмму для каждого продукта в списке данных, который использует Total Unique и TotalFail.Я искал повсюду и не могу найти способ, чтобы каждая круговая диаграмма продукта использовала данные, привязанные к списку данных.Кажется, мне нужно привязать данные к списку данных, а также привязать данные конкретно к диаграмме.

Наверное, мой вопрос: могу ли я это сделать?Если да, можете ли вы направить меня в правильном направлении?

Вот еще немного справочной информации.Мой Datalist выглядит следующим образом (с закомментированной диаграммой.

   <asp:DataList ID="ProductDataList" runat="server" RepeatColumns="5" CellPadding="10" HorizontalAlign="Center" ItemStyle-VerticalAlign="Top" 
        RepeatDirection="Horizontal" Width="90%" OnSelectedIndexChanged="ProductDataList_SelectedIndexChanged">
        <ItemTemplate>

           <asp:Label ID="lblProductName" runat="server" Text='<%# Eval("Unit_Type") %>' /><br /><br />
           <asp:Label ID="lblUniqueTests" runat="server" Text='<%# "Unique Tests: " + Eval("TotalUnique") %>' /><br />
           <asp:Label ID="lblFailedTests" runat="server" Text='<%# "Failed Tests: " + Eval("TotalFail") %>' /><br />
           <asp:Label ID="lblYield" runat="server" Text='<%# "Yield: " + Eval("Yield", "{0:0.00}") + "%" %>' /><br /><br />
           <asp:Image ID="imgProductImage" runat="server" ImageURL='<%# "Images/" + Eval("Product_Pic") %>'/><br /><br /><br />

            <asp:Chart ID="Chart1" runat="server">
                <Series>
                    <asp:Series Name="PieData" ChartType="Pie"></asp:Series>
                </Series>
                <ChartAreas>
                    <asp:ChartArea Name="ChartArea1"></asp:ChartArea>
                </ChartAreas>
            </asp:Chart>

        </ItemTemplate>
    </asp:DataList>

Вот часть кода, который я использую для заполнения Datalist.

    lsSQL = "SELECT Product_ID, Product_Type, Unit_Type, Product_Pic, t.TotalUnique, t.TotalFail, ";
    lsSQL = lsSQL + "IsNull(((TotalUnique - NullIf(TotalFail, 0)) / Convert(Numeric(38, 2), TotalUnique) * 100), 100) AS Yield ";
    lsSQL = lsSQL + "FROM ";
    lsSQL = lsSQL + "( ";
    lsSQL = lsSQL + "SELECT Products.Product_ID, Products.Product_Type, Products.Unit_Type, Products.Image, ";
    lsSQL = lsSQL + "(Select COUNT(DISTINCT Functional_Tests.UUT_Serial_Number) AS MyCount FROM Functional_Tests ";
    lsSQL = lsSQL + "    WHERE Time_Stamp >= '" + txtDateFrom.Text + "' AND Time_Stamp <= '" + txtDateTo.Text + "' AND Product_ID = Products.Product_ID) AS TotalUnique, ";
    lsSQL = lsSQL + "(Select COUNT(DISTINCT Functional_Tests.UUT_Serial_Number) AS MyCount FROM Functional_Tests ";
    lsSQL = lsSQL + "    WHERE Time_Stamp >= '" + txtDateFrom.Text + "' AND Time_Stamp <= '" + txtDateTo.Text + "' AND Product_ID = Products.Product_ID AND Test_Result = 'Fail' ) AS TotalFail ";
    lsSQL = lsSQL + "FROM Products WHERE " + DBProduct_ID_String;
    lsSQL = lsSQL + " ) t";

    SqlConnection DBConnection = new SqlConnection(cnnString);
    SqlCommand cmd = new SqlCommand();

    cmd.CommandText = lsSQL;
    cmd.CommandType = CommandType.Text;
    cmd.Connection = DBConnection;
    cmd.Connection.Open();

    ProductDataList.DataSource = cmd.ExecuteReader();
    ProductDataList.DataBind();
...