Skip to main content

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

Popular posts from this blog

SMTP servers of South Africa

SMTP Settings Below is a list of SMTP sites in South Africa, using this and the ISP Map you can try and find which one works best for you. Telkom smtp.saix.net (ADSL) smtp.telkomsa.co.za (56k dial up) smtp.telkomsa.net Internet Solutions smtp.isdsl.net (ADSL) smtp.dial-up.net (56k dial up on IS) smtp.layerone.net (3g backbone) Vodacom smtp.vodacom.co.za smtp.vodamail.co.za MTN smtp.mtn.co.za Cell C smtp.cellc.co.za (GPRS) mail.cmobile.co.za (also used by Virgin) ABSA mail.absa.co.za iBurst smtp.wbs.co.za smtp.iburst.co.za @lantic smtp.lantic.net (ADSL,Dialup, ISDN) Sentech smtp.sentech.co.za MWEB smtp.mweb.net (ADSL) - this is to be retired End June 2012, use below instead smtp.mweb.co.za (56k dial-up & ADSL & business) iAfrica smtp.uunet.co.za smtp.iafrica.com Neotel smtp.neotel.co.za Tiscali NOW MWeb smtp.tiscali.co.za Netactive NOW MWeb smtp.netactive.co.za Global smtp.global.co.za Hertzner Use y

Fixing winmail.dat problem - specifically in Quickbooks

For months we have had problems with attachments from Quickbooks. Having looked down many avenues I think we have found a fix or few: (See below for update) Here are a few websites that help out: Microsoft Outlook/Exchange MS-TNEF handling (aka "Winmail.dat", "Win.dat", or "Part 1.2" problem of unopenable email attachments) http://news.office-watch.com/t/n.aspx?a=716 KB958012 : When you use Outlook 2007 to send an e-mail message, the recipient of the message sees an attachment that is called Winmail.dat Essentially the summary is that there is a problem with Outlook trying to force Rich Text Format. so you need to turn that off. Mail users not receiving email in an Outlook derivative will have a problem. This format is called So: Go into Outlook On the "Tools" menu, click "Options", then click the "Mail Format" tab, and then the "Internet Format" button. Set "When sending Outlook Ri

Programmatically send email in Access using VBA and Outlook

When I first wrote my early Access system I used a function I setup in Outlook and then I called that. On upgrading I had a few problems with the older method then I found some help on the MSDN website here... and the related video. The first thing to do before starting the code is go into access, access the VBA (press Ctl+G) then click on "Tools" The "References" and then make sure you scroll down to "Microsoft Outlook ..." the version there will be determined by what version you have installed. This the code that I ended up with after looking at the site above Private olApp As Outlook.Application Private olNameSpace As Outlook.NameSpace ' The basics of this from MSDN site ' http://msdn.microsoft.com/en-us/library/ee208547(v=office.12).aspx Private Sub InitOutlook()  ' Initialize a session in Outlook   Set olApp = New Outlook.Application   'Return a reference to the MAPI layer   Set olNameSpace = olApp.GetNamespace("MA