private void btnCalc_Click(Object sender, EventArgs e) { Int32 year = Convert.ToInt32(edtYear.Value); Int32 numberOfConstituencies = Convert.ToInt32(edtNumberOfConstituencies.Value); Int32 geocode = 0; PopulationDataEntry data = null; if (rbxNational.Checked) { data = GetPopulationData(year); } if (rbxProvince.Checked) { var province = (PopulationDataEntry)cbxProvince.SelectedItem; geocode = province.Geocode; PopulationData downloader = new PopulationData(year, geocode); downloader.Process(); data = downloader.Data; } if (rbxNational.Checked && chkBuengKan.Checked) { ModifyPopulationDataForBuengKan(data); } data.SortSubEntitiesByEnglishName(); Dictionary <PopulationDataEntry, Int32> result = ConstituencyCalculator.Calculate(data, year, numberOfConstituencies); if (chkRegions.Checked) { List <PopulationDataEntry> regions = TambonHelper.GetRegionBySchemeName(cbxRegion.Text); Dictionary <PopulationDataEntry, Int32> regionResult = new Dictionary <PopulationDataEntry, Int32>(); foreach (PopulationDataEntry region in regions) { Int32 constituencies = 0; List <PopulationDataEntry> subList = new List <PopulationDataEntry>(); foreach (PopulationDataEntry province in region.SubEntities) { PopulationDataEntry foundEntry = data.FindByCode(province.Geocode); if (foundEntry != null) { constituencies = constituencies + result[foundEntry]; subList.Add(foundEntry); } } region.SubEntities.Clear(); region.SubEntities.AddRange(subList); region.CalculateNumbersFromSubEntities(); regionResult.Add(region, constituencies); } result = regionResult; } String displayResult = String.Empty; foreach (KeyValuePair <PopulationDataEntry, Int32> entry in result) { Int32 votersPerSeat = 0; if (entry.Value != 0) { votersPerSeat = entry.Key.Total / entry.Value; } displayResult = displayResult + String.Format("{0} {1} ({2} per seat)", entry.Key.English, entry.Value, votersPerSeat) + Environment.NewLine; } txtData.Text = displayResult; _lastCalculation = result; btnSaveCsv.Enabled = true; }