【问题标题】:Asp.net display sum of columns total in gridview footerAsp.net在gridview页脚中显示列总数
【发布时间】:2016-10-27 00:19:07
【问题描述】:

我有一个上传 excel 文件的程序。上传后excel文件的值会在gridview中传输。

我想要做的是获取每列的总值并将其放在页脚中。有人可以帮助我吗?谢谢。

这是我目前所拥有的。

 Protected Sub Button1_Click(sender As Object, e As System.EventArgs)Handles Button1.Click
        Dim fl As String = FileUpload1.PostedFile.FileName
        GridView1.DataSource = OpenExcelFile(fl)
        GridView1.DataBind()
        savetoDB(OpenExcelFile(fl))
 End Sub

Protected Function OpenExcelFile(ByVal fileName As String) As Object
    Dim dataTable As New System.Data.DataTable()
    Dim exl As String = FileUpload1.PostedFile.FileName
    Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & exl & ";Extended Properties=" & """Excel 12.0 Xml;HDR=YES;"""
    Dim adapter As New OleDbDataAdapter("SELECT [NAME],[FIL],[ENG],[SCI],[MTH]", connectionString)
    adapter.Fill(dataTable)
    Return dataTable
End Function

Protected Sub savetoDB(dt As System.Data.DataTable)
    Dim cmd As New SqlCommand
    Dim con As New SqlConnection("myconnectionhere")
    Dim dt2 As New System.Data.DataTable
    dt2 = OpenExcelFile(FileUpload1.PostedFile.FileName)

    Using bulk As SqlBulkCopy = New SqlBulkCopy(con)
        bulk.DestinationTableName = "studnt_table"
        bulk.ColumnMappings.Add("[NAME]", "st_name")
        bulk.ColumnMappings.Add("[FIL]", "sbj_fil")
        bulk.ColumnMappings.Add("[ENG]", "sbj_eng")
        bulk.ColumnMappings.Add("[SCI]", "sbj_sci")
        bulk.ColumnMappings.Add("[MTH]", "sbj_mth")
        con.Open()
        bulk.WriteToServer(dt2)
        con.Close()
        con.Close()
    End Using
End Sub

这是我的前端

这是我想要实现的示例布局。我想在行中获取列的总和并在页脚中显示总数。有谁知道我怎样才能做到这一点?任何帮助将非常感激。谢谢/

【问题讨论】:

  • 这可能与其他问题重复,但在我的情况下找不到解决方案。谢谢你。还检查了您发布的链接仍然无效。

标签: javascript asp.net vb.net gridview


【解决方案1】:

试试这个。我只为 1 列添加了示例以获得一个想法。在adatapter.Fill(dataTable) IsNull Check 之后扩展OpenExcelFile

adatapter.Fill(dataTable)
Dim sumRow As DataRow
Dim Col1Tot,Col2Tot,Col3Tot,Col4Tot As Decimal 

For Each row1 As DataRow In dataTable.Rows  
   If Not row1.IsNull("FIL") Then 
     Col1Tot =  Col1Tot + Convert.toDecimal(row1("FIL"))
   End If 
   If Not row1.IsNull("ENG") Then 
     Col2Tot =  Col2Tot + Convert.toDecimal(row1("ENG"))
   End If 
   If Not row1.IsNull("SCI") Then 
     Col3Tot =  Col3Tot + Convert.toDecimal(row1("SCI"))
   End If   
   If Not row1.IsNull("MTH") Then 
     Col4Tot =  Col4Tot + Convert.toDecimal(row1("MTH"))
   End If 
Next row1

'Do the remaining columns in same way   
'Finally add it to the Datatable as a new row
sumRow =  dataTable.NewRow()
sumRow("FIL") = Col1Tot 
dataTable.Rows.Add(sumRow)

sumRow =  dataTable.NewRow()
sumRow("ENG") = Col2Tot 
dataTable.Rows.Add(sumRow)

sumRow =  dataTable.NewRow()
sumRow("SCI") = Col3Tot 
dataTable.Rows.Add(sumRow)

sumRow =  dataTable.NewRow()
sumRow("MTH") = Col4Tot 
dataTable.Rows.Add(sumRow)

return dataTable;

让我们知道您的发现。

【讨论】:

  • Omygaad 这是一个救生员!非常感谢。但是我还有另一个问题,如果列的值包含小数,如果列是空白怎么办。如果该列为空,则尝试它返回错误。
  • 哈哈,我已更新示例/答案以检查 DbNull 并转换为十进制。再次仅在一列上。祝你好运。
  • 很抱歉问了你这么多问题我真的是asp.net的新手,我还在探索。我怎样才能在所有列中简化我的 if 语句?而且小数点不起作用我的意思是它返回总值而不计算小数点。谢谢你。再次抱歉。
  • 什么意思它返回总值而不计算小数。
  • 啊,更新应该可以解决问题。我之前将Col1Total 设置为Integer,而不是Decimal。现在应该可以正确执行了。
猜你喜欢
  • 2018-01-29
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多