天天看点

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

        }

继续阅读