winfrom datagridview下方显示统计列

最近在项目时客户要求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 &#
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值