自定义DataGridView重复列

时间:2014-07-17 03:15:26

标签: c# .net winforms datagridview

我通过从DataGridView继承创建了一个自定义Winforms控件。

自定义数据网格视图定义了它自己的列和映射。

然而,每当我将它从工具箱拖到表单的设计图面上时,表单都会为自定义控件中的每一列重新创建一个列控件(DataGridViewTextBoxColumn),这样我最终会得到双倍的列数。有

整个想法是控制已经“自我意识”,所以我不需要表格做任何事情。很明显,我忽略了一些简单的东西,但我的网络比Windows更多,没有什么能立刻成为原因。

enter image description here

自定义数据网格:

 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,但似乎无法解决它。

3 个答案:

答案 0 :(得分:3)

您似乎尚未在这些列中指定了列DataPropertyName。如果您已手动创建列并将DataSrouce分配给数据网格,则将自动生成不匹配的列。在MSDN

上获取有关DataPropertyName的更多信息和示例

答案 1 :(得分:1)

转到 gridview 属性或F4 - >取消选中自动生成的Coloumns =" False"

答案 2 :(得分:0)

如果你有这样的代码;

            for (int i = 0; i < columnNames.Length; i++)
            {
                GridName.Columns.Add(columnNames[i], columnNames[i]);
            }

只添加一列。我用了一面旗帜

        if (AddColumnFlag)
        {
            for (int i = 0; i < columnNames.Length; i++)
            {
                GridName.Columns.Add(columnNames[i], columnNames[i]);
            }
        }

当我在除构造函数之外的任何地方调用函数时,将flag设置为false。 它解决了我的问题。