【发布时间】:2014-09-07 18:43:04
【问题描述】:
我通过从 DataGridView 继承创建了一个自定义 Winforms 控件。
自定义数据网格视图定义了它自己的列和映射。
但是,每当我将它从工具箱拖到表单的设计图面上时,表单都会为自定义控件中的每一列重新创建一个列控件 (DataGridViewTextBoxColumn),这样我最终得到的列数是我应该的两倍有。
整个想法是控件已经“自我意识”,所以我不需要表单来做任何事情。很明显,我忽略了一些简单的事情,但我比 Windows 更喜欢 Web,没有什么能立即成为造成这种情况的原因。
自定义数据网格:
partial class StrategyGrid
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle();
this.zquantityDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.zbuyPricePerShareDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.zbuyParcelSubtotalDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xbuyParcelTotalDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xbreakevenPricePerShareDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xtargetPricePerShareDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xtargetParcelTotalDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xTargetNetProfitAmt = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xTargetNetProfitPct = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xMarketPriceNetProfitAmt = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xMarketPriceNetProfitPct = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.xColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
this.SuspendLayout();
//
// zquantityDataGridViewTextBoxColumn
//
this.zquantityDataGridViewTextBoxColumn.DataPropertyName = "Quantity";
dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
this.zquantityDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle13;
this.zquantityDataGridViewTextBoxColumn.HeaderText = "Qty";
this.zquantityDataGridViewTextBoxColumn.MinimumWidth = 85;
this.zquantityDataGridViewTextBoxColumn.Name = "zquantityDataGridViewTextBoxColumn";
this.zquantityDataGridViewTextBoxColumn.Width = 85;
//
// zbuyPricePerShareDataGridViewTextBoxColumn
//
this.zbuyPricePerShareDataGridViewTextBoxColumn.DataPropertyName = "BuyPricePerShare";
dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle14.Format = "N2";
dataGridViewCellStyle14.NullValue = null;
this.zbuyPricePerShareDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle14;
this.zbuyPricePerShareDataGridViewTextBoxColumn.HeaderText = "Buy Price";
this.zbuyPricePerShareDataGridViewTextBoxColumn.MinimumWidth = 85;
this.zbuyPricePerShareDataGridViewTextBoxColumn.Name = "zbuyPricePerShareDataGridViewTextBoxColumn";
this.zbuyPricePerShareDataGridViewTextBoxColumn.ToolTipText = "Buy price per share";
this.zbuyPricePerShareDataGridViewTextBoxColumn.Width = 85;
//
// zbuyParcelSubtotalDataGridViewTextBoxColumn
//
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.DataPropertyName = "BuyParcelSubtotal";
dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle15.Format = "C2";
dataGridViewCellStyle15.NullValue = null;
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle15;
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.HeaderText = "Buy Sub";
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.MinimumWidth = 85;
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.Name = "zbuyParcelSubtotalDataGridViewTextBoxColumn";
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.Visible = false;
this.zbuyParcelSubtotalDataGridViewTextBoxColumn.Width = 85;
//
// zbuyBrokerageFeeAmountDataGridViewTextBoxColumn
//
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.DataPropertyName = "BuyBrokerageFeeAmount";
dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle16.Format = "C0";
dataGridViewCellStyle16.NullValue = null;
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle16;
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.HeaderText = "Rates";
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.MinimumWidth = 75;
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.Name = "zbuyBrokerageFeeAmountDataGridViewTextBoxColumn";
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.ToolTipText = "Buy Brokerage Rates";
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.Visible = false;
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn.Width = 75;
//
// xbuyParcelTotalDataGridViewTextBoxColumn
//
this.xbuyParcelTotalDataGridViewTextBoxColumn.DataPropertyName = "BuyParcelTotal";
dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle17.Format = "N0";
dataGridViewCellStyle17.NullValue = null;
this.xbuyParcelTotalDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle17;
this.xbuyParcelTotalDataGridViewTextBoxColumn.HeaderText = "Buy Price Total";
this.xbuyParcelTotalDataGridViewTextBoxColumn.MinimumWidth = 85;
this.xbuyParcelTotalDataGridViewTextBoxColumn.Name = "xbuyParcelTotalDataGridViewTextBoxColumn";
this.xbuyParcelTotalDataGridViewTextBoxColumn.ToolTipText = "Buy Total Parcel Cost";
this.xbuyParcelTotalDataGridViewTextBoxColumn.Width = 85;
//
// xbreakevenPricePerShareDataGridViewTextBoxColumn
//
this.xbreakevenPricePerShareDataGridViewTextBoxColumn.DataPropertyName = "BreakevenPricePerShare";
dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle18.Format = "N2";
dataGridViewCellStyle18.NullValue = null;
this.xbreakevenPricePerShareDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle18;
this.xbreakevenPricePerShareDataGridViewTextBoxColumn.HeaderText = "B/E Price";
this.xbreakevenPricePerShareDataGridViewTextBoxColumn.MinimumWidth = 100;
this.xbreakevenPricePerShareDataGridViewTextBoxColumn.Name = "xbreakevenPricePerShareDataGridViewTextBoxColumn";
this.xbreakevenPricePerShareDataGridViewTextBoxColumn.ToolTipText = "Breakeven price per share";
//
// xtargetPricePerShareDataGridViewTextBoxColumn
//
this.xtargetPricePerShareDataGridViewTextBoxColumn.DataPropertyName = "TargetPricePerShare";
dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle19.Format = "N2";
dataGridViewCellStyle19.NullValue = null;
this.xtargetPricePerShareDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle19;
this.xtargetPricePerShareDataGridViewTextBoxColumn.HeaderText = "Target Price";
this.xtargetPricePerShareDataGridViewTextBoxColumn.MinimumWidth = 100;
this.xtargetPricePerShareDataGridViewTextBoxColumn.Name = "xtargetPricePerShareDataGridViewTextBoxColumn";
this.xtargetPricePerShareDataGridViewTextBoxColumn.ToolTipText = "Target price per share";
//
// xtargetParcelTotalDataGridViewTextBoxColumn
//
this.xtargetParcelTotalDataGridViewTextBoxColumn.DataPropertyName = "TargetParcelTotal";
dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle20.Format = "N0";
dataGridViewCellStyle20.NullValue = null;
this.xtargetParcelTotalDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle20;
this.xtargetParcelTotalDataGridViewTextBoxColumn.HeaderText = "Target Price NV";
this.xtargetParcelTotalDataGridViewTextBoxColumn.MinimumWidth = 100;
this.xtargetParcelTotalDataGridViewTextBoxColumn.Name = "xtargetParcelTotalDataGridViewTextBoxColumn";
this.xtargetParcelTotalDataGridViewTextBoxColumn.ToolTipText = "Target Price Net Value";
//
// xTargetNetProfitAmt
//
this.xTargetNetProfitAmt.DataPropertyName = "TargetNetProfitAmt";
dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle21.Format = "N2";
dataGridViewCellStyle21.NullValue = "0";
this.xTargetNetProfitAmt.DefaultCellStyle = dataGridViewCellStyle21;
this.xTargetNetProfitAmt.HeaderText = "Target NP Amt";
this.xTargetNetProfitAmt.MinimumWidth = 100;
this.xTargetNetProfitAmt.Name = "xTargetNetProfitAmt";
//
// xTargetNetProfitPct
//
this.xTargetNetProfitPct.DataPropertyName = "TargetNetProfitPct";
dataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
this.xTargetNetProfitPct.DefaultCellStyle = dataGridViewCellStyle22;
this.xTargetNetProfitPct.HeaderText = "Target NP Pct";
this.xTargetNetProfitPct.MinimumWidth = 100;
this.xTargetNetProfitPct.Name = "xTargetNetProfitPct";
//
// xMarketPriceNetProfitAmt
//
this.xMarketPriceNetProfitAmt.DataPropertyName = "MarketPriceNetProfitAmt";
dataGridViewCellStyle23.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle23.Format = "N2";
dataGridViewCellStyle23.NullValue = "0";
this.xMarketPriceNetProfitAmt.DefaultCellStyle = dataGridViewCellStyle23;
this.xMarketPriceNetProfitAmt.HeaderText = "Market Price NP Amt";
this.xMarketPriceNetProfitAmt.MinimumWidth = 100;
this.xMarketPriceNetProfitAmt.Name = "xMarketPriceNetProfitAmt";
//
// xMarketPriceNetProfitPct
//
this.xMarketPriceNetProfitPct.DataPropertyName = "MarketPriceNetProfitPct";
dataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
dataGridViewCellStyle24.Format = "N2";
dataGridViewCellStyle24.NullValue = null;
this.xMarketPriceNetProfitPct.DefaultCellStyle = dataGridViewCellStyle24;
this.xMarketPriceNetProfitPct.HeaderText = "Market Price NP Pct";
this.xMarketPriceNetProfitPct.MinimumWidth = 100;
this.xMarketPriceNetProfitPct.Name = "xMarketPriceNetProfitPct";
this.xMarketPriceNetProfitPct.ReadOnly = true;
//
// xColumn2
//
this.xColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.xColumn2.HeaderText = "";
this.xColumn2.Name = "xColumn2";
this.xColumn2.ReadOnly = true;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(FlatShareTradePlanList);
//
// StrategyGrid
//
this.AutoGenerateColumns = false;
this.BackgroundColor = System.Drawing.Color.Black;
this.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.zquantityDataGridViewTextBoxColumn,
this.zbuyPricePerShareDataGridViewTextBoxColumn,
this.zbuyParcelSubtotalDataGridViewTextBoxColumn,
this.zbuyBrokerageFeeAmountDataGridViewTextBoxColumn,
this.xbuyParcelTotalDataGridViewTextBoxColumn,
this.xbreakevenPricePerShareDataGridViewTextBoxColumn,
this.xtargetPricePerShareDataGridViewTextBoxColumn,
this.xtargetParcelTotalDataGridViewTextBoxColumn,
this.xTargetNetProfitAmt,
this.xTargetNetProfitPct,
this.xMarketPriceNetProfitAmt,
this.xMarketPriceNetProfitPct,
this.xColumn2});
this.Cursor = System.Windows.Forms.Cursors.Arrow;
this.MultiSelect = false;
this.Name = "StrategyGridView";
this.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Sunken;
this.RowHeadersVisible = false;
this.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.Size = new System.Drawing.Size(1193, 401);
this.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.entryStrategyGridView_CellFormatting);
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridViewTextBoxColumn zquantityDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn zbuyPricePerShareDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn zbuyParcelSubtotalDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn zbuyBrokerageFeeAmountDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn xbuyParcelTotalDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn xbreakevenPricePerShareDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn xtargetPricePerShareDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn xtargetParcelTotalDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn xTargetNetProfitAmt;
private System.Windows.Forms.DataGridViewTextBoxColumn xTargetNetProfitPct;
private System.Windows.Forms.DataGridViewTextBoxColumn xMarketPriceNetProfitAmt;
private System.Windows.Forms.DataGridViewTextBoxColumn xMarketPriceNetProfitPct;
private System.Windows.Forms.DataGridViewTextBoxColumn xColumn2;
private System.Windows.Forms.BindingSource bindingSource1;
}
当拖动到表单上时,表单会在其 InitializeComponent 内部生成以下内容:
private StrategyGrid strategyGrid1;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn28;
不确定它是从哪里读取这些列的“要求”……但这是错误的。它们已经存在于自定义控件中。我想也许可以做一些 AccessModifiers 但似乎无法解决。
【问题讨论】:
-
代码会有所帮助...
-
我正试图避免代码转储,因为它是由设计师生成的,因此丑陋而冗长。我希望这对 WinForms 开发人员来说是显而易见的......但如果你坚持......
-
你能把 DataGridViewAutoGenerateColumns 设置为 false 吗?
-
这是我的第一个想法,但没有任何改变。另请注意,此行为是设计时。所以没有数据被注入到控件中。
-
仅在设计时或运行时?你能在运行时计算你的列数,看看会产生什么吗?
标签: c# .net winforms datagridview