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