【问题标题】:SQL how do I display the sum of a column in the same colum on a gridview?SQL如何在gridview的同一列中显示列的总和?
【发布时间】:2020-09-11 20:44:52
【问题描述】:

我正在使用 VB.Web 应用程序,我正在尝试获取输出中同一列末尾的所有列值的总量。例如,我有一列包含多个价格,并在列的末尾获取这些价格的总和。就我而言,我想对 D.ORIG_PRC 做同样的事情。

有没有办法通过使用这种将值传递给gridview的方法来做到这一点?

或者我最好使用 ASP 控件将值输出到 gridview?

查询

Protected Sub ExecuteButton_Click(sender As Object, e As EventArgs) Handles ExecuteButton.Click
    Dim StoreID As Integer
    Dim TransID As Integer
    Dim RgstID As Integer
    Dim dt As DataTable

    If Not Integer.TryParse(StoreIDTextbox.Text, StoreID) Then
            MsgBox("Invalid input. Please enter both Store ID and Transaction ID.")
        Exit Sub

    End If

    If Not Integer.TryParse(TransactionIDTextbox.Text, TransID) Then
        MsgBox("Invalid input. Please enter both Store ID and Transaction ID.")
        Exit Sub
    End If

    SQL.AddParam("@Str_ID", StoreID)
    SQL.AddParam("@Tran_ID", TransID)

    'Rgst_ID Validation
    If RegisterIDTextbox.Text.Length = 0 Then
        MsgBox("RgstID has no value")
        SQL.AddParam("@Rgst_ID", "")
    ElseIf RegisterIDTextbox.Text.Length > 0 Then
        MsgBox("RgstID has a value")
        RgstID = Integer.Parse(RegisterIDTextbox.Text)
        SQL.AddParam("@Rgst_ID", RgstID)
    End If

    Try
        dt = SQL.ExecQuery(" Select H.Emp_ID, H.Cust_ID, H.Rgst_ID, D.TRAN_LN_NUM AS Line#, D.DISC_CD AS Disc_CD, D.AUTH_EMP_ID AS Auth_Emp_ID, CAST(D.ORIG_PRC AS DECIMAL(19,2)) AS Orig_Prc, CAST(D.DISC_AMT AS DECIMAL(19,2)) AS Disc_Amt, D.DISC_PCT AS Disc_Pct, D.GL_ACCT_ID AS GL_Acct_ID
                             From Transaction_Header H 
                             INNER Join LN_Detail L On (H.Str_ID = L.Str_ID And H.Rgst_ID = L.Rgst_ID And H.Tran_ID = L.Tran_ID)
                             INNER Join LN_Discount D ON (L.Str_ID = D.Str_ID And L.Rgst_ID = D.Rgst_ID And L.Tran_ID = D.Tran_ID And L.Tran_LN_Num = D.Tran_LN_Num)  
                             WHERE(H.Str_ID = @Str_ID)
                                And (H.Tran_ID = @Tran_ID)
                                And ((H.Rgst_ID = @Rgst_ID) Or (@Rgst_ID Is NULL Or @Rgst_ID = ''))")

    Catch ex As Exception
        MsgBox(ex.Message)
        Exit Sub
    End Try

    GridView1.DataSource = dt
    GridView1.DataBind()
    TimeLabel.Text = DateAndTime.Now
End Sub

SQL 控制

Private ReadOnly ConStr As String = ""
Private DBCmd As SqlCommand

'Query Parameters
Public Params As New List(Of SqlParameter)

'This generates a blank sqlclient class with the deafult connection string
Public Sub New()
End Sub

'Allow connection string override
Public Sub New(connectionString As String)
    ConStr = connectionString
End Sub

'Execute Query Sub
Public Function ExecQuery(query As String) As DataTable

    Dim DBDT = New DataTable
    Using DBCon As New SqlConnection(ConStr),
            DBCmd As New SqlCommand(query, DBCon)
        Params.ForEach(Sub(p) DBCmd.Parameters.Add(p))
        Params.Clear()
        DBCon.Open()
        DBDT.Load(DBCmd.ExecuteReader)
    End Using
    Return DBDT
End Function

'Add Params
Public Sub AddParam(Name As String, Value As Object)
    Dim NewParam As New SqlParameter(Name, Value)
    Params.Add(NewParam)
End Sub 

【问题讨论】:

  • 计算数据表行的总和,并将新行添加到数据表,并将总和设置为总和列。

标签: .net sql-server vb.net gridview


【解决方案1】:

根据法比奥的评论:

'after you execquery()
Dim sum = dt.Compute("SUM([Orig_Prc])")
Dim r = dt.NewRow()
dt("Orig_Prc").Value = sum
dt.Rows.Add(r)

如果您的任何列是AllowDBNull = False,那么您也必须为这些列输入值


您也可以在数据库中执行此操作,方法是在对您想要的列求和的 SELECT 上进行 UNIONing。如果您这样做,我建议您添加一个订购列,并让详细信息行有0,总行有1,以便您可以按它订购并确保总数显示在底部

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2019-05-10
    • 1970-01-01
    • 2012-12-28
    • 2015-10-29
    相关资源
    最近更新 更多