/// <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
}