我通过从DataGridView继承创建了一个自定义Winforms控件。
自定义数据网格视图定义了它自己的列和映射。
然而,每当我将它从工具箱拖到表单的设计图面上时,表单都会为自定义控件中的每一列重新创建一个列控件(DataGridViewTextBoxColumn),这样我最终会得到双倍的列数。有
整个想法是控制已经“自我意识”,所以我不需要表格做任何事情。很明显,我忽略了一些简单的东西,但我的网络比Windows更多,没有什么能立刻成为原因。
自定义数据网格:
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,但似乎无法解决它。
答案 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。 它解决了我的问题。