title: Custom DataGridView duplicated columns
body: <p>I've created a custom Winforms control by subclassing from the DataGridView. </p>
  
  <p>The custom datagrid view defines it's own columns and mappings.</p>
  
  <p>However whenever I drag it off the toolbox and onto the design surface of a form, the form recreates a column control (DataGridViewTextBoxColumn) for each column in the custom control, such that I end up with double the number of columns I should have.</p>
  
  <p>The whole idea is that the control is already "self aware" so I don't need the form to do anything. Clearly I've overlooked something simple but I'm more Web than Windows and nothing immediately stands out as the cause for this.</p>
  
  <p><img src="https://i.stack.imgur.com/rlDLa.gif" alt="enter image description here"></p>
  
  <p>Custom Datagrid:</p>
  
  <pre><code> partial class StrategyGrid
  {
          private System.ComponentModel.IContainer components = null;
  
  
          protected override void Dispose(bool disposing)
          {
              if (disposing &amp;&amp; (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;
  
  
      }
  </code></pre>
  
  <p>When dragging onto a form the form generates the following insides it's InitializeComponent:</p>
  
  <pre><code>  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;
  </code></pre>
  
  <p>Not sure where it's reading this "requirement" of having these columns from... but it's wrong. They are already present within the custom control. I thought maybe something to do AccessModifiers but can't seem to work it out.</p>