/// <summary> /// 显示统计信息 /// </summary> private void ShowSummaryTextInfo() { int icnt = this._SummaryContainer.Controls.Count; _FirstColSumTextType = SummaryTextType.None; foreach (Control ctr in this._SummaryContainer.Controls) { SummaryTextBox sumTextBox = ctr as SummaryTextBox; if (sumTextBox == null) { continue; } if (sumTextBox.Name == "RowsHeader_Label") { continue; } DataGridViewColumn currCell = this.GridViewColumns[sumTextBox.Name]; if (currCell == null) { continue; } sumTextBox.ForeColor = this._SummaryRowForeColor; sumTextBox.BackColor = this._SummaryRowBackColor; if (sumTextBox.IsHeaderLabel) {//如果SummaryTextBox的IsHeaderLabel为true则显示统计标题文本 sumTextBox.Text = this._SummaryHeaderText; sumTextBox.TextAlign = HorizontalAlignment.Center; sumTextBox.Font = new Font(this.DefaultCellStyle.Font, this._SummaryHeaderBold ? FontStyle.Bold : FontStyle.Regular); _FirstColSumTextType = SummaryTextType.Text; sumTextBox.Invalidate(); continue; } if (sumTextBox.IsSummary) {//如果是SummaryTextBox的IsSummary为true则计算对应列的合计 sumTextBox.Text = this.CalcSum(currCell); sumTextBox.FormatString = currCell.DefaultCellStyle.Format; sumTextBox.TextAlign = AligmentHelper.TranslateGridColumnAligment(currCell.DefaultCellStyle.Alignment); sumTextBox.Invalidate(); continue; } if (!sumTextBox.IsHeaderLabel && !sumTextBox.IsSummary) { sumTextBox.Text = ""; sumTextBox.Invalidate(); } } this._SummaryRowHeaderLabel.Text = "√"; //如果第一列是文本,则将统计文本设置到_SummaryRowHeaderLabel if (_FirstColSumTextType != SummaryTextType.Text) { this._SummaryRowHeaderLabel.Text = this._SummaryHeaderText; } this._SummaryRowHeaderLabel.TextAlign = HorizontalAlignment.Center; this._SummaryRowHeaderLabel.Font = new Font(this.DefaultCellStyle.Font, this._SummaryHeaderBold ? FontStyle.Bold : FontStyle.Regular); this._SummaryRowHeaderLabel.Invalidate(); }
private void RefreshSummaryTextBoxCache() { if (this._SummaryColumns == null || this._SummaryColumns.Length == 0) { this._SummaryContainer.Visible = false; return; } this._SummaryContainer.Visible = this._SummaryRowVisible; //统计列 for (int i = 0; i < this._SummaryColumns.Length; i++) { if (this.GridViewColumns.ContainsKey(_SummaryColumns[i])) { SummaryTextBox sumTextBox = new SummaryTextBox(); DataGridViewColumn currCol = this.GridViewColumns[_SummaryColumns[i]]; sumTextBox.Name = currCol.DataPropertyName.Trim() == "" ? currCol.Name : currCol.DataPropertyName; sumTextBox.IsSummary = true; sumTextBox.IsHeaderLabel = false; if (!this._SummaryTextHashTable.ContainsKey(currCol)) { this._SummaryTextHashTable.Add(currCol, sumTextBox); } if (currCol.DisplayIndex == 0) { _FirstColSumTextType = SummaryTextType.Number; } } } //非统计列 foreach (DataGridViewColumn currCol in this.GridViewColumns.Values) { if (!_SummaryTextHashTable.ContainsKey(currCol)) { SummaryTextBox sumTextBox = new SummaryTextBox(); sumTextBox.Name = currCol.DataPropertyName.Trim() == "" ? currCol.Name : currCol.DataPropertyName; sumTextBox.IsSummary = false; sumTextBox.IsHeaderLabel = false; this._SummaryTextHashTable.Add(currCol, sumTextBox); } } foreach (DataGridViewColumn currCol in this.GridViewColumns.Values) { if (_FirstColSumTextType == SummaryTextType.None) { //取得当前列的下一列 DataGridViewColumn NextCol = this.Columns.GetNextColumn(currCol, DataGridViewElementStates.None, DataGridViewElementStates.None); if (NextCol == null) { break; } if (NextCol.Name.Trim() == "") { continue; } SummaryTextBox nextSumTextBox = this._SummaryTextHashTable[NextCol] as SummaryTextBox; SummaryTextBox currSumTextBox = this._SummaryTextHashTable[currCol] as SummaryTextBox; currSumTextBox.Name = currCol.DataPropertyName.Trim() == "" ? currCol.Name : currCol.DataPropertyName; //如果下一列对应是SummaryTextBox实例是合计,且第一列不是头列时设置第一列为头列类型 if (nextSumTextBox.IsSummary && _FirstColSumTextType != SummaryTextType.Text) { currSumTextBox.IsHeaderLabel = true; currSumTextBox.IsSummary = false; currSumTextBox.Visible = true; _FirstColSumTextType = SummaryTextType.Text; } else { currSumTextBox.IsHeaderLabel = false; currSumTextBox.IsSummary = false; currSumTextBox.Visible = false; } } } }