【问题标题】:ASP.NET ListView - total value (sum) for a columnASP.NET ListView - 列的总值(总和)
【发布时间】:2012-03-20 09:57:28
【问题描述】:

我正在编写一个可重用的控件——我们称之为 MyListView——继承自标准 ASP.NET ListView 控件。它的数据源始终设置为 LinqDataSource,我需要计算特定列的总值(该列所有值的总和)。哪种方法最适合计算总值?我正在考虑 OnItemDataBound 事件并使用全局变量计算总计,但我还需要在 MyListView 中分页(使用标准 Pager 控件),并且此事件仅针对当前可见页面上的行触发,而不是针对数据源中的所有行。我也不想在 ASPX 页面后面的代码中计算总和,我只想在 aspx 中指定一个列名,MyListView 会自动计算该列的总值。

感谢您的帮助!

【问题讨论】:

    标签: asp.net listview user-controls


    【解决方案1】:

    如果您使用的是分页,那么获得这样的结果并不容易。我认为您应该考虑将用于总计的行放在 ListView 之外(这样您也可以使用 LINQ 来计算总计,我想您不想枚举所有项目来计算总计可以在 SQL 端快速完成)。

    【讨论】:

      【解决方案2】:
      Dim total As Integer
      For Each Items As ListViewItem In lV_allItems.Items
          Dim lbl As Label = CType(Items.FindControl("Quantitytxtbox"), Label)
          total += lbl.Text
      Next
      Label1.Text = "TOTAL FRAME ADDED : " + total.ToString
      

      我将此代码放在页面预渲染中,它工作得很好,你必须确保列中的内容是整数,否则你需要转换。

      【讨论】:

        【解决方案3】:

        如果您想从数据库中获取总值,我的建议是将输出参数与您的 query / linkq 一起传递给数据库,并在您获取数据的同一调用中从数据库中获取所有记录的总和。

        【讨论】:

          【解决方案4】:

          假设你使用这个查询来绑定你的列表视图

          var queryforBind= (from c in table).Skip(1).Take(10); //1 and 10 can be changed according to your requirement
          

          绑定您的列表视图后,调用此查询来计算总数。

          var sum = queryforBind.Sum(x => x => x.Field); //Field can be according your requirement
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-13
            • 1970-01-01
            • 2022-01-23
            相关资源
            最近更新 更多