从sqlDataSource获取列中的值的总和

时间:2015-11-25 07:09:28

标签: vb.net gridview .net-4.0 datasource sqldatasource

我有一个从DB表中选择的SqlDataSource dsDetails。

<asp:SqlDataSource ID="dsDetails" runat="server" SelectCommand="spGetDetails" 
OnSelected="dsDetails_Selected" SelectCommandType="StoredProcedure">
<SelectParameters>
    <asp:QueryStringParameter Name="mode" QueryStringField="mode" Type="String" DefaultValue="NULL" />
</SelectParameters>
</asp:SqlDataSource>

结果绑定到aspx页面中的gridview

<asp:GridView  CssClass="content" ID="gridDetails" runat="server" DataSourceID="dsDetails" AllowSorting="True" AllowPaging="True" PagerSettings-Position ="TopAndBottom" DataKeyNames="ID" AutoGenerateColumns="False" >
        <PagerSettings Position="TopAndBottom" Mode="NumericFirstLast" />
        <EmptyDataTemplate>
            <b>There are no records to display.</b>
        </EmptyDataTemplate>        
        <Columns>
            <asp:BoundField DataField="empNum" HeaderText="Employee Number" SortExpression="empnum" ApplyFormatInEditMode="True" HtmlEncode="False" ReadOnly="True" />
            <asp:BoundField DataField="empName" HeaderText="Emplopyee Name" SortExpression="empname" ApplyFormatInEditMode="True" HtmlEncode="False" ReadOnly="True" />                
            <asp:BoundField DataField="empDoj" HeaderText="Emplopyee Date of joining" SortExpression="empdoj" ApplyFormatInEditMode="True" HtmlEncode="False" ReadOnly="True" />                
            <asp:TemplateField HeaderText="Salary" SortExpression="sal">
                <EditItemTemplate>
                    <asp:TextBox ID="txtSal" runat="server" Text='<%# Eval("sal", "{0:F}") %>'></asp:TextBox>                        
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Eval("sal", "{0:C2}") %>'></asp:Label>--%>
                </ItemTemplate>
            </asp:TemplateField>                
            <asp:TemplateField>
                <EditItemTemplate>
                    <asp:Button ID="btnSave" runat="server" CausesValidation="True" CommandName="cmdSave"
                        Text="Save" />&nbsp;
                    <asp:Button ID="btnCancel" runat="server" CausesValidation="False" CommandName="cmdCancel" 
                        Text="Cancel" />
                </EditItemTemplate>
                <ItemTemplate>                    
                    <asp:Button ID="btnApprove" runat="server" CausesValidation="False" CommandName="cmdApprove"
                        Text="Approve" />&nbsp;
                    <asp:Button ID="btnEdit" runat="server" CausesValidation="False" CommandName="cmdEdit"
                        Text="Edit" />&nbsp;
                    <asp:Button ID="btnDelete" runat="server" CausesValidation="false" CommandName="cmdDelete"
                        Text="Delete" />
                    <ajaxToolkit:ConfirmButtonExtender ID="cbeDelete" runat="server" 
                        TargetControlID="btnDelete"
                        ConfirmText="Are you sure?" />   
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView> 

现在我必须实现的是找到网格视图的工资列的总和。如何使用页面加载方法中的数据源实现此目的?我必须得到整个结果集的薪水总和(平均记录返回60-80)

遍历行并计算gridDetails_RowDataBound中的和将不会有效,因为rows.count将是最大值10,因为页面大小为10.当结果集有超过10条记录时55表示它将计算总和仅用于当前的gridview页面(前10个记录)。我必须得到所有55条记录的总和,并在pageload方法的标签中显示它。

请提供建议..

2 个答案:

答案 0 :(得分:0)

SQLDataSource提供在数据检索完成后触发的Selected事件。见SqlDataSource.Selected Event。在这种情况下,您应该可以对网格中的行进行求和。

答案 1 :(得分:0)

这对我有用

在PageLoad方法中添加

dvSql = DirectCast(dsDetails.Select(DataSourceSelectArguments.Empty), DataView)
                    For Each drvSql As DataRowView In dvSql
                        amtSum += CDbl(drvSql("sal"))
                    Next
                    lblTotalAmt.Text = CStr(recoveryAmtSum)

在dsDetails_Selected方法中添加此行

e.Command.Parameters("@approvaltype").Value = mode