You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AdvancedDataGridView排序时固定总计行问题求助

解决AdvancedDataGridView总计行排序失效问题
  • 优先推荐:改用控件自带的Footer行实现总计
    AdvancedDataGridView支持显示Footer行,开启后总计行自动固定在底部,不受筛选、排序影响,无需额外处理:

    1. 在设计器或代码中设置advancedDataGridView1.ShowFooter = true;
    2. 计算各列总计值,直接赋值给Footer行:
      // 示例:计算金额列总计
      decimal totalAmount = 0;
      foreach (DataRow row in yourDataTable.Rows)
      {
          totalAmount += Convert.ToDecimal(row["Amount"]);
      }
      advancedDataGridView1.FooterRow.Cells["ItemName"].Value = "total";
      advancedDataGridView1.FooterRow.Cells["Amount"].Value = totalAmount;
      
  • 若必须保留DataTable中的总计行:用CustomSort事件实现强制排序
    控件默认的SortStringChanged事件会被自身逻辑覆盖,改用CustomSort事件自定义排序规则,确保总计行始终在最后:

    1. 确保控件的AllowCustomSort属性设为true(设计器或代码中设置)
    2. 绑定CustomSort事件,编写自定义比较逻辑:
      private void advancedDataGridView1_CustomSort(object sender, DG.AdvancedDataGridView.CustomSortEventArgs e)
      {
          e.Comparer = new Comparison<DataGridViewRow>((row1, row2) =>
          {
              // 获取Sorting列值,区分普通行(0)和总计行(1)
              int sortVal1 = Convert.ToInt32(row1.Cells["Sorting"].Value);
              int sortVal2 = Convert.ToInt32(row2.Cells["Sorting"].Value);
      
              if (sortVal1 != sortVal2)
              {
                  // 总计行始终排在最后
                  return sortVal1.CompareTo(sortVal2);
              }
              else
              {
                  // 普通行按当前选中列和排序方向处理
                  var sortCol = e.SortColumn;
                  var dir = e.SortDirection;
                  object val1 = row1.Cells[sortCol.Index].Value;
                  object val2 = row2.Cells[sortCol.Index].Value;
      
                  if (val1 == DBNull.Value && val2 == DBNull.Value) return 0;
                  if (val1 == DBNull.Value) return dir == ListSortDirection.Ascending ? -1 : 1;
                  if (val2 == DBNull.Value) return dir == ListSortDirection.Ascending ? 1 : -1;
      
                  int compare = ((IComparable)val1).CompareTo(val2);
                  return dir == ListSortDirection.Descending ? -compare : compare;
              }
          });
      }
      

内容的提问来源于stack exchange,提问作者Ahmed Saif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:27:23