DataGridView,設計時屬性配置
private void changeParent() {
if (!DesignMode && Parent != null) {
var panel = new Panel { Dock = DockStyle.Fill, BackColor = BackgroundColor };
// TableLayoutPanel 特殊處理
if (Parent is TableLayoutPanel tlp) {
var pos = tlp.GetCellPosition(this);
tlp.Controls.Remove(this);
tlp.Controls.Add(panel, pos.Column, pos.Row);
tlp.SetRowSpan(panel, tlp.GetRowSpan(this));
tlp.SetColumnSpan(panel, tlp.GetColumnSpan(this));
} else {
Parent.Controls.Remove(this);
Parent.Controls.Add(panel);
}
panel.Controls.Add(this);
this.Dock = DockStyle.Fill;
// SummaryRow 控件容器
summaryControl.Dock = DockStyle.Bottom;
panel.Controls.Add(summaryControl);
// 同步滾動條等後續調用...
}
}
ColumnAdded/Removed/DisplayIndexChanged/WidthChangedreCreateSumBoxes() 重建 TextBox 陣列resizeSumBoxes() 按列寬調整 TextBox 尺寸protected override void OnPaint(PaintEventArgs e) {
var bounds = new Rectangle(ClientRectangle.X + 2, ClientRectangle.Y + 2,
ClientRectangle.Width - 2, ClientRectangle.Height - 2);
using (var pen = new Pen(borderColor)) {
e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
e.Graphics.DrawRectangle(pen, ClientRectangle.X, ClientRectangle.Y,
ClientRectangle.Width - 1, ClientRectangle.Height - 1);
e.Graphics.DrawString(Text, Font, Brushes.Black, bounds, format);
}
}
屬性 IsSummary 標識是否為聚合單元格。
private void calcSummaries() {
foreach (string colName in SummaryColumns) {
decimal sum = 0;
int count = 0;
foreach (DataGridViewRow row in Rows) {
if (row.Cells[colName].Value != null) {
sum += Convert.ToDecimal(row.Cells[colName].Value);
count++;
}
}
// 根據 SummaryType 設置對應 TextBox.Text
}
}
觸發時機:RowsAdded、RowsRemoved、CellValueChanged。
SummaryColumns:需聚合的列名集合SummaryRowBackColor:摘要行背景色SummaryTypes:每列聚合類型 (Sum/Avg/Count...)需將 Nwind.mdb 複製到輸出目錄。