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

Bitcoin / Cryptocurrency – what is it and how can I benefit

What is it I started investigating Bitcoin when it was worth just over $1000 a bitcoin. I was interested in what it was and how it worked. A lot of people are saying we missed the boat, but I believe that everyone should at least try put a little money in now, or at least use a faucet (see below) to make a little micro-currency. You can read a Wiki article about bitcoin and its history etc. But what you need to know is that it is a currency, that is independent of country. No one really knows who invented the concept of a cryptocurrency since the person who published the paper used a nom de plume. All new cryptocurrencies work more or less the same way as Bitcoin. So as I explain below I interchange these terms. Bitcoin is the original cryptocurrency. How Bitcoin works The currency releases a coin based on a mathematical formula. There will never be more than 21 million bitcoins (other cryptocurrencies do not work like this). Each bitcoin can have divided into one hundred mil...

iTunes song purchased on iPhone not showing in the library, only show purchased

I recently purchase an album on my iPhone, and then when I wanted to mke sure it was in my iTunes library it was not there, but in the Store I found it and it said purchased. If I clieck on Check for Available Downloads, it said nothing. After some search i found this: https://discussions.apple.com/thread/5551143 Which had this fact: " Music can't be redownloaded in all countries, so depending upon where you are you might not be able to redownload music. If music does show as a category, but not that album, then is it hidden :   http://support.apple.com/kb/HT4919 " I then connected my iPhone and saw that to copy a purhcase your computer's iTunes via File > Devices > Transfer Purchases

Access conversion NOTE1: default DateSerial in VBA/Access to SQL

I have started slowly converting my Access database to SQL. The reason is that I would like to take the application online. After trying to use Access's (version 2007) transfer tool, which did not work that well. I found Microsoft's SQL Migration Assistant 2008 for Access, nicknamed SSMA. Which you can download here . When you install there is a niggle about the license, which you need to download into their specified directory and it must be the name they provide. So about the create table. My one table would not convert and I could not see why. After looking at the SQL command I saw the problem was the use of DateSerial. I googled a few sites and could not find an answer The CREATE TABLE line was: [RequireUntilDate] datetime2(0) DEFAULT DateSerial(1980,1,1) NOT NULL, I clicked on the whole command and copied it and then in SQL Server Management Studio, I tried to create the table and found that if I specified the date in US date format it worked: [RequireUnti...