winfrom datagridview下方显示统计列

在C# WinForm应用中,为满足客户需求,实现了在DataGridView下方添加统计行的功能。通过自定义SummaryDataGridView类并编写核心代码,成功解决这一问题。此文章将分享实现该功能的具体源码和调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在项目时客户要求datagridview下方有一个统计行,在网上找了好久,都没有找到合适的解决方案,最终自己改写了一个,总算把问题给解决了。废话不多了,现在把源码分享出来。


先看一下效果图。

调用方法:

<span style="font-size:14px;">  SummaryDataGridView.ShowSummary(Grid_Inventory, true, "合计", true, new string[] { "T_Number", "T_Weight", "T_SalePrice" });</span>
说明:
<span style="font-size:14px;"><strong>new string[] { "T_Number", "T_Weight", "T_SalePrice" } 为要统计列的字段,方法在窗体构造函数中。</strong></span>


核心代码:

SummaryDataGridView 类 代码如下

 #region 显示统计列
        /// <summary>
        /// 显示DataGridView的统计信息
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="SummaryColumns">要统计的列名称或数据源绑定列名称</param>
        public static void ShowSummary(this DataGridView dgv, string[] SummaryColumns)
        {
            SummaryControlContainer summaryControl = new SummaryControlContainer(dgv, SummaryColumns);
            dgv.Controls.Add(summaryControl);
            //dgv.Tag = summaryControl;
            summaryControl.BringToFront();
            summaryControl.Show();
        }
        /// <summary>
        /// 显示DataGridView的统计信息
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="DisplaySumRowHeader">是否显示合计行标题</param>
        /// <param name="SumRowHeaderText">合计列标题</param>
        /// <param name="SumRowHeaderTextBold">合计列标题用粗体显示</param>
        /// <param name="SummaryColumns">要统计的列名称或数据源绑定列名称</param>
        public static void ShowSummary( this DataGridView dgv, bool DisplaySumRowHeader, string SumRowHeaderText, bool SumRowHeaderTextBold, string[] SummaryColumns)
        {
            SummaryControlContainer summaryControl = new SummaryControlContainer(dgv, DisplaySumRowHeader, SumRowHeaderText, SumRowHeaderTextBold, SummaryColumns);
            dgv.Controls.Add(summaryControl);
            //dgv.Tag = summaryControl;
            summaryControl.BringToFront();
            summaryControl.Show();
        }
        #endregion

添加一个用户控件SummaryControlContainer.cs代码如下:

 public partial class SummaryControlContainer : UserControl
    {
        #region 公有属性

        private bool _DisplaySumRowHeader;
        /// <summary>
        /// 是否显示合计行标题
        /// </summary>
        public bool DisplaySumRowHeader
        {
            get { return _DisplaySumRowHeader; }
            set { _DisplaySumRowHeader = value; }
        }


        private string _SumRowHeaderText = "合计";
        /// <summary>
        /// 合计列标题
        /// </summary>
        public string SumRowHeaderText
        {
            get
            {
                if (_DisplaySumRowHeader)
                {
                    return _SumRowHeaderText;
                }
                else
                {
                    return string.Empty;
                }
            }
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    _SumRowHeaderText = "合计";
                }
                else
                {
                    _SumRowHeaderText = value;
                }
            }
        }


        private bool _SumRowHeaderTextBold;
        /// <summary>
        /// 合计列标题用粗体显示
        /// </summary>
        public bool SumRowHeaderTextBold
        {
            get { return _SumRowHeaderTextBold; }
            set { _SumRowHeaderTextBold = value; }
        }

        private string[] _SummaryColumns;
        /// <summary>
        /// 要统计的列名称或数据源绑定列名称
        /// </summary>
        public string[] SummaryColumns
        {
            get { return _SummaryColumns; }
            set
            {
                _SummaryColumns = value;
            }
        }

        private string _FormatString = "F02";
        public string FormatString
        {
            get { return _FormatString; }
            set { _FormatString = value; }
        }
        #endregion

        #region 私有变量
        private Hashtable sumBoxHash;
        private DataGridView dgv;
        private Label sumRowHeaderLabel;
        #endregion

        #region 构造函数
        public SummaryControlContainer(DataGridView dgv, string[] summaryColumns)
            : this(dgv, true, "合计", false, summaryColumns)
        {
        }
        public SummaryControlContainer(DataGridView dgv, bool displaySumRowHeader, string sumRowHeaderText,
            bool sumRowHeaderTextBold, string[] summaryColumns)
        {
            if (dgv == null)
            {
                throw new Exception("DataGridView 不能为空!");
            }

            this.dgv = dgv;
            _DisplaySumRowHeader = displaySumRowHeader;
            _SumRowHeaderText = sumRowHeaderText;
            _SumRowHeaderTextBold = sumRowHeaderTextBold;
            _SummaryColumns = summaryColumns;


            this.Visible = true;
            this.Height = dgv.RowTemplate.Height;
            this.Top = dgv.Height - this.Height;
            this.Left = dgv.Left;
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值