/// <summary> /// Calculate the Sums of the summary columns /// </summary> private void calcSummaries() { foreach (ReadOnlyTextBox roTextBox in sumBoxHash.Values) { if (roTextBox.IsSummary) { roTextBox.Tag = 0; roTextBox.Text = "0"; roTextBox.Invalidate(); } } if (SummaryColumns != null && SummaryColumns.Length > 0 && sumBoxHash.Count > 0) { foreach (DataGridViewRow dgvRow in DGV.Rows) { foreach (DataGridViewCell dgvCell in dgvRow.Cells) { foreach (DataGridViewColumn dgvColumn in sumBoxHash.Keys) { if (dgvCell.OwningColumn.Equals(dgvColumn)) { ReadOnlyTextBox sumBox = (ReadOnlyTextBox)sumBoxHash[dgvColumn]; if (sumBox != null && sumBox.IsSummary) { if (dgvCell.Value != null && !(dgvCell.Value is DBNull)) { if (IsInteger(dgvCell.Value)) { sumBox.Tag = Convert.ToInt64(sumBox.Tag) + Convert.ToInt64(dgvCell.Value); } else if (IsDecimal(dgvCell.Value)) { sumBox.Tag = Convert.ToDecimal(sumBox.Tag) + Convert.ToDecimal(dgvCell.Value); } sumBox.Text = string.Format("{0}", sumBox.Tag); if (sumBox.Text == "0" && !ReportShowZero) { sumBox.Text = String.Empty; } sumBox.Invalidate(); } } } } } } } }
private void calcSummaries1() { if (TotalRow != null) { foreach (ReadOnlyTextBox roTextBox in sumBoxHash.Values) { if (roTextBox.IsSummary) { roTextBox.Tag = 0; roTextBox.Text = "0"; roTextBox.Invalidate(); } } if (SummaryColumns != null && SummaryColumns.Length > 0 && sumBoxHash.Count > 0) { foreach (DataGridViewColumn dgvColumn in sumBoxHash.Keys) { ReadOnlyTextBox sumBox = (ReadOnlyTextBox)sumBoxHash[dgvColumn]; if (sumBox != null && sumBox.IsSummary) { if (TotalRow is DataRow) { DataRow dataRow = TotalRow as DataRow; sumBox.Tag = dataRow[dgvColumn.DataPropertyName]; } else { sumBox.Tag = ReflectionHelper.GetProperty(TotalRow, dgvColumn.DataPropertyName); } sumBox.Text = string.Format("{0}", sumBox.Tag); if (sumBox.Text == "0" && !ReportShowZero) { sumBox.Text = String.Empty; } sumBox.Invalidate(); } } } } }
/// <summary> /// Resize the summary Boxes depending on the /// width of the Columns of the DataGridView /// </summary> private void resizeSumBoxes() { try { this.SuspendLayout(); if (sumBoxHash != null && sumBoxHash.Count > 0) { try { int rowHeaderWidth = DGV.RowHeadersVisible ? DGV.RowHeadersWidth - 1 : 0; int sumLabelWidth = DGV.RowHeadersVisible ? DGV.RowHeadersWidth - 1 : 0; int curPos = rowHeaderWidth; if (sumLabelWidth > 0) { sumRowHeaderLabel.Visible = true; sumRowHeaderLabel.Width = sumLabelWidth; if (DGV.RightToLeft == RightToLeft.Yes) { if (sumRowHeaderLabel.Dock != DockStyle.Right) { sumRowHeaderLabel.Dock = DockStyle.Right; } } else { if (sumRowHeaderLabel.Dock != DockStyle.Left) { sumRowHeaderLabel.Dock = DockStyle.Left; } } } else { if (sumRowHeaderLabel.Visible) { sumRowHeaderLabel.Visible = false; } } int iCnt = 0; Rectangle oldBounds; foreach (DataGridViewColumn dgvColumn in SortedColumns) { ReadOnlyTextBox sumBox = (ReadOnlyTextBox)sumBoxHash[dgvColumn]; if (sumBox != null) { oldBounds = sumBox.Bounds; if (!dgvColumn.Visible) { sumBox.Visible = false; continue; } int from = dgvColumn.Frozen ? curPos : curPos - DGV.HorizontalScrollingOffset; int width = dgvColumn.Width + (iCnt == 0 ? 0 : 0); if (from < rowHeaderWidth) { width -= rowHeaderWidth - from; from = rowHeaderWidth; } if (sumBox.IsLastColumn) { String test = string.Empty; } if (width < 4) { if (sumBox.Visible) { sumBox.Visible = false; } } else { if (this.RightToLeft == RightToLeft.Yes) { from = this.Width - from - width; } if (sumBox.Left != from || sumBox.Width != width) { sumBox.SetBounds(from, 0, width, 0, BoundsSpecified.X | BoundsSpecified.Width); } if (!sumBox.Visible) { sumBox.Visible = true; } } curPos += dgvColumn.Width + (iCnt == 0 ? 0 : 0); if (oldBounds != sumBox.Bounds) { sumBox.Invalidate(); } } iCnt++; } } finally { this.ResumeLayout(); } } } #if (DEBUG) catch (Exception ee) { MessageBox.Show(ee.ToString()); System.Diagnostics.Debug.WriteLine(ee.ToString()); } #else catch { } #endif }
/// <summary> /// Create summary boxes for each Column of the DataGridView /// </summary> private void reCreateSumBoxes() { foreach (Control control in sumBoxHash.Values) { this.Controls.Remove(control); control.Dispose(); } sumBoxHash = new Hashtable(); this.Controls.Clear(); int iCnt = 0; ReadOnlyTextBox sumBox; List <DataGridViewColumn> sortedColumns = SortedColumns; foreach (DataGridViewColumn dgvColumn in sortedColumns) { sumBox = new ReadOnlyTextBox(); sumBoxHash.Add(dgvColumn, sumBox); sumBox.Top = 0; sumBox.Height = DGV.RowTemplate.Height; sumBox.BorderColor = DGV.GridColor; sumBox.BackColor = DGV.DefaultCellStyle.BackColor; sumBox.ForeColor = DGV.DefaultCellStyle.ForeColor; sumBox.Width = dgvColumn.Width; sumBox.Font = CommonGlobalUtil.DEFAULT_FONT; sumBox.BringToFront(); if (DGV.ColumnCount - iCnt == 1) { sumBox.IsLastColumn = true; } if (SummaryColumns != null && SummaryColumns.Length > 0) { for (int iCntX = 0; iCntX < SummaryColumns.Length; iCntX++) { if (SummaryColumns[iCntX] == dgvColumn.DataPropertyName || SummaryColumns[iCntX] == dgvColumn.Name) { // sumBox.TextAlign = TextHelper.TranslateGridColumnAligment(dgvColumn.DefaultCellStyle.Alignment); sumBox.TextAlign = HorizontalAlignment.Center; sumBox.IsSummary = true; // sumBox.Font =CommonGlobalUtil.DEFAULT_FONT; sumBox.FormatString = dgvColumn.DefaultCellStyle.Format; if (dgvColumn.ValueType == typeof(System.Int32) || dgvColumn.ValueType == typeof(System.Int16) || dgvColumn.ValueType == typeof(System.Int64) || dgvColumn.ValueType == typeof(System.Single) || dgvColumn.ValueType == typeof(System.Double) || dgvColumn.ValueType == typeof(System.Single) || dgvColumn.ValueType == typeof(System.Decimal)) { sumBox.TextAlign = HorizontalAlignment.Right; sumBox.Tag = System.Activator.CreateInstance(dgvColumn.ValueType); } } } } sumBox.BringToFront(); this.Controls.Add(sumBox); iCnt++; } sumRowHeaderLabel.Font = new Font(DGV.DefaultCellStyle.Font, FontStyle.Bold); sumRowHeaderLabel.Anchor = AnchorStyles.Left; sumRowHeaderLabel.TextAlign = ContentAlignment.MiddleCenter; sumRowHeaderLabel.Height = this.Height; sumRowHeaderLabel.Width = DGV.RowHeadersWidth; sumRowHeaderLabel.Top = 0; sumRowHeaderLabel.Text = SumRowHeaderText; sumRowHeaderLabel.ForeColor = DGV.DefaultCellStyle.ForeColor; sumRowHeaderLabel.Margin = new Padding(0); sumRowHeaderLabel.Padding = new Padding(0); this.Controls.Add(sumRowHeaderLabel); calcSummaries1(); adjustSumControlToGrid(); resizeSumBoxes(); }