Как вывести итоги после каждого теста в этом (Сводная таблица) GridView - PullRequest
0 голосов
/ 03 марта 2012

У меня есть GridView, который показывает общее количество участников в каждом тесте для каждого подразделения в моей компании.Теперь я хочу суммировать эти числа и добавить новую строку для отображения общего количества участников во всех подразделениях после каждого теста (т. Е. Иметь промежуточный итог на каждый тест). Так как это сделать?

Мой код ASP.NET:

<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" 
                                            DataSourceID="SqlDataSource6" CssClass="datatable"
                                            CellPadding="0" BorderWidth="0px" GridLines="None" 
                                            OnDataBinding="GridView3_DataBinding" OnRowDataBound="GridView3_RowDataBound" AllowPaging="True" PageSize="16">

                                            <Columns>
                                                <asp:BoundField DataField="Title" HeaderText="Quiz" 
                                                    SortExpression="Title" />
                                                <asp:BoundField DataField="DivisionShortcut" 
                                                    HeaderText="Division" 
                                                    SortExpression="DivisionShortcut" />
                                                <asp:BoundField DataField="Total Number of Participants" 
                                                    HeaderText="Total Number of Participants" ReadOnly="True" 
                                                    SortExpression="Total Number of Participants"/>
                                            </Columns>

                                            <RowStyle CssClass="row" />

                                            <SortedAscendingCellStyle CssClass="sortasc"></SortedAscendingCellStyle>
                                            <SortedAscendingHeaderStyle CssClass="sortasc"></SortedAscendingHeaderStyle>
                                            <SortedDescendingHeaderStyle CssClass="sortdesc"></SortedDescendingHeaderStyle>
                                        </asp:GridView>

                                        <asp:SqlDataSource ID="SqlDataSource6" runat="server" 
                                        ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT     dbo.Quiz.Title, dbo.Divisions.DivisionShortcut,  COUNT(DISTINCT dbo.UserQuiz.Username) AS [Total Number of Participants]
        FROM         dbo.employee INNER JOIN
                              dbo.UserQuiz ON dbo.employee.Username = dbo.UserQuiz.Username INNER JOIN
                              dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID INNER JOIN
                              dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode
        GROUP BY dbo.Quiz.Title, dbo.Divisions.DivisionShortcut
        ORDER BY dbo.Quiz.Title"></asp:SqlDataSource>

Мой код позади:

protected void GridView3_DataBinding(object sender, EventArgs e)
        {
            GridViewGroup first = new GridViewGroup(GridView3, null, "Title");
        }

        protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //for adding a spearator between rows
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if ((e.Row.RowIndex % 7) == 0)
                {
                    foreach (TableCell c in e.Row.Cells)
                        c.Attributes.Add("Style", "border-top: #BBD9EE 5px double ");
                }
            }
        }

Снимок длятекущая таблица: enter image description here

1 Ответ

1 голос
/ 03 марта 2012

Превратить последний столбец в поле шаблона вместо связанного поля:

<asp:TemplateField HeaderText="Total Number of Participants">
<ItemTemplate >
         <span><%#DataBinder.Eval(Container.DataItem, "Total Number of Participants")%></span>
</ItemTemplate>
<FooterTemplate><%# GetTotal() %></FooterTemplate>
</asp:TemplateField>

Нижний колонтитул этого столбца будет содержать сумму итогов. Добавьте метод GetTotal к коду, за которым вычисляется сумма.

Вы можете добавить ShowFooter="true" к объявлению gridview.

protected int GetTotal()
{
    int total = 0;

    using (var Connection = new SqlCeConnection("<testConnectionString>"))
    using (var Command = new SqlCeCommand("<SQL statement>"))
    using (var Reader = Command.ExecuteReader())
    {
       while (Reader.Read())
       {
           total += (int)Reader["Total Number of Participants"];
       }
    }
    return total;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...