Is there any way of optimizing this code?
private void ModifyDataTable(DataTable dt)
{
if (dt != null)
{
bool b_dataValue = false;
decimal rowreport_data0Sum, rowreport_data1Sum, rowreport_data2Sum, rowreport_data3Sum, rowreport_data4Sum;
rowreport_data0Sum = rowreport_data1Sum = rowreport_data2Sum = rowreport_data3Sum = rowreport_data4Sum = 0;
foreach (DataRow row in dt.Rows)
{
if (row.ItemArray[1].ToString() == "$150,000 & Over" || row.ItemArray[1].ToString() == "$150,000 - $199,999" || row.ItemArray[1].ToString() == "$200,000 - $299,999" || row.ItemArray[1].ToString() == "$300,000 & Over")
{
rowreport_data0Sum += GetRowValue(row, "report_data0");
rowreport_data1Sum += GetRowValue(row, "report_data1");
rowreport_data2Sum += GetRowValue(row, "report_data2");
rowreport_data3Sum += GetRowValue(row, "report_data3");
rowreport_data4Sum += GetRowValue(row, "report_data4");
}
}
if (dt.Columns.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
if (row.ItemArray[1].ToString() == "$150,000 & Over")
{
foreach (DataColumn col in dt.Columns)
{
if ((col.ColumnName == "report_data0") || (col.ColumnName == "report_data1") || (col.ColumnName == "report_data2") || (col.ColumnName == "report_data3") || (col.ColumnName == "report_data4"))
{
if (!row.IsNull(col))
{
b_dataValue = true;
if (b_dataValue)
{
if (col.ColumnName == "report_data0") row[col] = rowreport_data0Sum + "%";
else if (col.ColumnName == "report_data1") row[col] = rowreport_data1Sum + "%";
else if (col.ColumnName == "report_data2") row[col] = rowreport_data2Sum + "%";
else if (col.ColumnName == "report_data3") row[col] = rowreport_data3Sum + "%";
else if (col.ColumnName == "report_data4") row[col] = rowreport_data4Sum + "%";
}
else
{
dt.Rows.Remove(row);
}
}
}
}
}
}
if (b_dataValue)
{
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
DataRow row = dt.Rows[i];
if (row.ItemArray[1].ToString() == "$150,000 - $199,999" || row.ItemArray[1].ToString() == "$200,000 - $299,999" || row.ItemArray[1].ToString() == "$300,000 & Over")
{
dt.Rows.Remove(row);
}
}
}
}
}
}
row.ItemArray[1].ToString()
should be stored in a variable because otherwise each time you access it you return in your datatable \$\endgroup\$