更改控制父级删除内容

时间:2012-09-23 22:38:05

标签: c# winforms datagridview parent tabcontrol

在我的应用程序中,我有一个DataGridView,它从一个Tab Control移动到另一个Tab Control。

我这样做是通过更改其父级来实现的。这在第一次从原始Tab控件移动到新控件时没有问题,但是当将父级更改回原始时,DataGridView显示(所有列都可见)但视图中没有数据。

我已经尝试将数据重新加载到DataGridView中,并刷新/使控件无效以使其重绘,但它仍然显示为空。但是,当控件返回到辅助父级时,数据又会返回。

我也在使用这个确切的代码用于另一个DataGridView,它完全没有任何问题。

任何想法都将受到高度赞赏,并提前感谢。

从原始到中学

gvwRFIs.Parent = tabProcessingRFI; //Working
gvwConsentInfoMemos.Parent = tabProcessingMemos; //Working

从中学到原创

gvwRFIs.Parent = tabConsentInfoRFI; //Empty Data
gvwConsentInfoMemos.Parent = tabConsentInfoMemos; //Working

RFI DataGridView Designer代码

        // 
        // gvwRFIs
        // 
        this.gvwRFIs.AllowUserToAddRows = false;
        this.gvwRFIs.AllowUserToDeleteRows = false;
        this.gvwRFIs.AllowUserToResizeRows = false;
        this.gvwRFIs.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
        this.gvwRFIs.BackgroundColor = System.Drawing.Color.White;
        this.gvwRFIs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.gvwRFIs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.gvwID,
        this.gvwType,
        this.gvwSeq,
        this.gvwCreated,
        this.gvwProcessor,
        this.gvwLetter,
        this.gvwResponded,
        this.gvwS,
        this.gvwDetails});
        this.gvwRFIs.Dock = System.Windows.Forms.DockStyle.Fill;
        this.gvwRFIs.Location = new System.Drawing.Point(3, 3);
        this.gvwRFIs.MultiSelect = false;
        this.gvwRFIs.Name = "gvwRFIs";
        this.gvwRFIs.ReadOnly = true;
        this.gvwRFIs.RowHeadersVisible = false;
        this.gvwRFIs.RowHeadersWidth = 4;
        this.gvwRFIs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
        this.gvwRFIs.Size = new System.Drawing.Size(1078, 422);
        this.gvwRFIs.TabIndex = 4;
        this.gvwRFIs.DoubleClick += new System.EventHandler(this.gvwRFIs_DoubleClick);

同意标签控制设计师代码

        // 
        // tabConsentInfoRFI
        // 
        this.tabConsentInfoRFI.Controls.Add(this.gvwRFIs);
        this.tabConsentInfoRFI.Controls.Add(this.lvwConsentInfoRFI);
        this.tabConsentInfoRFI.Location = new System.Drawing.Point(4, 32);
        this.tabConsentInfoRFI.Name = "tabConsentInfoRFI";
        this.tabConsentInfoRFI.Padding = new System.Windows.Forms.Padding(3);
        this.tabConsentInfoRFI.Size = new System.Drawing.Size(1084, 428);
        this.tabConsentInfoRFI.TabIndex = 4;
        this.tabConsentInfoRFI.Text = "RFI\'s";
        this.tabConsentInfoRFI.UseVisualStyleBackColor = true;

处理选项卡控件设计器代码

        // 
        // tabProcessingRFI
        // 
        this.tabProcessingRFI.Location = new System.Drawing.Point(4, 36);
        this.tabProcessingRFI.Name = "tabProcessingRFI";
        this.tabProcessingRFI.Padding = new System.Windows.Forms.Padding(3);
        this.tabProcessingRFI.Size = new System.Drawing.Size(868, 465);
        this.tabProcessingRFI.TabIndex = 1;
        this.tabProcessingRFI.Text = "RFI";
        this.tabProcessingRFI.UseVisualStyleBackColor = true;

2 个答案:

答案 0 :(得分:1)

我发现了这个问题, 同意设计器代码中的ListView是一个看起来相同但不再使用的旧控件。因此,当控件的父级回到“原始”选项卡时,它就处于此控件的后台。 一旦控件被删除(以为它已经存在),代码就能完美运行。

感谢LarsTech让我朝着正确的方向前进。和akhisp有答案。

答案 1 :(得分:0)

您应该从不再位于的标签的Tab.Controls列表中删除该对象。所以请执行以下操作:

tabProcessingRFI.Controls.Remove(gvwRFIs);
gvwRFIs.Parent = tabConsentInfoRFI