String index array to calculate totals using Dictionary type

Thought I would document this, since it took me a while to gather all the information to do it, but once I got it, it was very useful.
I searched things like how to create a string indexed array and, multidimensional arrays and lists to eventually find the Dictionary Type, very powerful, and you can link it with objects/classes and lists to extend it.
Essentially I was running a SQL query where I am building a complex table using a number of conditions, and could not use GridView because of that. But I also wanted a total at the bottom. So created a Total Table in the asp page.

Then in the code file this is what I added:
class ItemTotals
{
  public string ItemDesc { get; set; }
  public double TotalsQty { get; set; }
}

//----
// code to run query... which returns into oleData
//----
string _strItemDesc = oleData["ItemDesc"].ToString();
if (sumItemTotals.ContainsKey(_strItemDesc))
{
   sumItemTotals[_strItemDesc].TotalsQty += Convert.ToDouble(oleData["QuantityOrdered"]);
}
else
{
   sumItemTotals[_strItemDesc] = new ItemTotals
   {
      ItemDesc = _strItemDesc,
      TotalsQty = Convert.ToDouble(oleData["QuantityOrdered"].ToString())
   };
}
// now do the totals table
TableRow _tblItemsNameRow = new TableRow();
TableRow _tblItemsTotalRow = new TableRow();
// add headers
TableCell _tblItemHdr1 = new TableCell();
_tblItemHdr1.Text = "Item";
_tblItemHdr1.Font.Bold = true;
_tblItemsNameRow.Cells.Add(_tblItemHdr1);
TableCell _tblItemHdr2 = new TableCell();
_tblItemHdr2.Text = "Total";
_tblItemHdr2.Font.Bold = true;
_tblItemsTotalRow.Cells.Add(_tblItemHdr2);

foreach (KeyValuePair _pair in sumItemTotals)
{
  // add the description
  TableCell _tblCellItemDesc = new TableCell();
  _tblCellItemDesc.Text = _pair.Value.ItemDesc;
  _tblCellItemDesc.Font.Bold = true;
  _tblItemsNameRow.Cells.Add(_tblCellItemDesc);
  // add the total
  TableCell _tblCellItemTotal = new TableCell();
  _tblCellItemTotal.Text = String.Format("{0:0.00}",_pair.Value.TotalsQty);
  _tblCellItemTotal.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Right;
  _tblItemsTotalRow.Cells.Add(_tblCellItemTotal);
}
//now add Theme total rows.
tblTotals.Rows.Add(_tblItemsNameRow);
tblTotals.Rows.Add(_tblItemsTotalRow);

This is a great way to do this, and I found it logical and easy to code.

Comments