DevExpress横向扩展表格某列求和

        /// <summary>
        /// 自动求和
        /// </summary>
        /// <param name="RowHandle"></param>
        /// <param name="ColumnHandle"></param>
        void DoRowSummary(int RowHandle, int ColumnHandle)
        {
            string strFieldName = string.Empty,
            strBandName = string.Empty;
            strFieldName = dtHorizalColumns.Rows[RowHandle]["FIELDNAME_VCHR"].ToString();
            strBandName = dtHorizalColumns.Rows[RowHandle]["BANDNAME_VCHR"].ToString();
            int index = strBandName.LastIndexOf(',');
            strBandName = strBandName.Substring(0, index);//截取同类
            int value = -9999;//本次变化的差值
            int oldvalue = -8888;//  同组原来的值            
            bool blnHasGet = false;  //是否找到上次的值
            int.TryParse(dtHorizalColumns.Rows[RowHandle]["FIELDCAPTAIN_VCHR"].ToString(), out value);
            if (value == -9999)
            {
                return;
            }
            if (beforeCellValue == "" && dtHorizalRows.Rows[RowHandle][ColumnHandle].ToString() == "")
            {
                return; //选择了空的
            }
            if (beforeCellValue!="" && dtHorizalRows.Rows[RowHandle][ColumnHandle].ToString() == "") //说明本单元格的值从有值变为空值,不会影响同组.
            {
                value = 0 - value;
                blnHasGet = true;
            }
            #region 往同组遍历,重置同组的值
            //往上遍历
            for (int up = RowHandle - 1; !blnHasGet && up > 0; up--)
            {
                if (dtHorizalColumns.Rows[up]["BANDNAME_VCHR"].ToString().StartsWith(strBandName))
                {
                    if (dtHorizalRows.Rows[up][ColumnHandle].ToString() != "")
                    {
                        int.TryParse(dtHorizalColumns.Rows[up]["FIELDCAPTAIN_VCHR"].ToString(), out oldvalue);
                        if (oldvalue != -8888)
                        {
                            value = value - oldvalue;
                            blnHasGet = true;
                            dtHorizalRows.Rows[up][ColumnHandle] = "";
                            break;
                        }
                    }
                }
                else
                {
                    break;
                }
            }
            //没有找到的情况下,往下遍历
            for (int down = RowHandle + 1;!blnHasGet && down < dtHorizalRows.Rows.Count; down++)
            {
                if (dtHorizalColumns.Rows[down]["BANDNAME_VCHR"].ToString().StartsWith(strBandName))
                {
                    if (dtHorizalRows.Rows[down][ColumnHandle].ToString() != "")
                    {
                        int.TryParse(dtHorizalColumns.Rows[down]["FIELDCAPTAIN_VCHR"].ToString(), out oldvalue);
                        if (oldvalue != -8888)
                        {
                            value = value - oldvalue;
                            blnHasGet = true;
                            dtHorizalRows.Rows[down][ColumnHandle] = "";
                            break;
                        }
                    }
                }
                else
                {
                    break;
                }
            }
            #endregion


             #region 对求和进行赋值
            string strFieldName2 = string.Empty;// 进行触发第2次求和,不做2次以上的求和
            foreach (int key in dictRowSum.Keys)
            {
                if ( dictRowSum[key].StartsWith(strFieldName + ",") ||dictRowSum[key].Contains("," + strFieldName+",")||dictRowSum[key].EndsWith(","+strFieldName))
                {
                    if (dtHorizalRows.Rows[key][ColumnHandle].ToString() == "")
                    {
                        dtHorizalRows.Rows[key][ColumnHandle] = value;
                    }
                    else
                    {
                        int s = Convert.ToInt32(dtHorizalRows.Rows[key][ColumnHandle]) + value;
                        string svalue = (s == 0) ? "" : s.ToString();
                        dtHorizalRows.Rows[key][ColumnHandle] = svalue;
                    }
                    strFieldName2 = dtHorizalColumns.Rows[key]["FIELDNAME_VCHR"].ToString();//找到第1次求和,并记下。
                    continue;
                }
                if (!string.IsNullOrEmpty(strFieldName2))
                {
                    if (dictRowSum[key].StartsWith(strFieldName2 + ",") || dictRowSum[key].Contains("," + strFieldName2 + ",") || dictRowSum[key].EndsWith("," + strFieldName2))
                    {
                        if (dtHorizalRows.Rows[key][ColumnHandle].ToString() == "")
                        {
                            dtHorizalRows.Rows[key][ColumnHandle] = value;
                        }
                        else
                        {
                            int s = Convert.ToInt32(dtHorizalRows.Rows[key][ColumnHandle]) + value;
                            string svalue = (s == 0) ? "" : s.ToString();
                            dtHorizalRows.Rows[key][ColumnHandle] = svalue;
                        }
                        break;
                    }
                }
            }
            #endregion
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值