C# 如何将DataGridView动态添加到TabPage

C# 如何将DataGridView动态添加到TabPage,c#,windows,datagridview,tabcontrol,tabpage,C#,Windows,Datagridview,Tabcontrol,Tabpage,我有一个TabControl。 我希望动态添加选项卡页,该选项卡页将动态添加DataGridView。 我可以动态地添加选项卡页面,但是当我将DataGridView添加到动态选项卡页面时,什么都没有显示。 感谢您提供的任何帮助 这是代码 myTabPage.SuspendLayout(); tabControlNonQueued.TabPages.Add(myTabPage);

我有一个TabControl。 我希望动态添加选项卡页,该选项卡页将动态添加DataGridView。 我可以动态地添加选项卡页面,但是当我将DataGridView添加到动态选项卡页面时,什么都没有显示。 感谢您提供的任何帮助

这是代码

                    myTabPage.SuspendLayout();
                    tabControlNonQueued.TabPages.Add(myTabPage);
                    loadDataGridToTab(dataTable, myTabPage);
    private void loadDataGridToTab(DataTable dt, TabPage tab)
    {
        DataGridView grid = new DataGridView();
        tab.Controls.Add(grid);
        tab.Refresh();
        grid.Visible = true;
        System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle = new System.Windows.Forms.DataGridViewCellStyle();
        grid.AllowUserToAddRows = false;
        grid.AllowUserToDeleteRows = false;
        grid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
        grid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle;
        grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        dataGridViewCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
        dataGridViewCellStyle.BackColor = System.Drawing.SystemColors.Control;
        dataGridViewCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        dataGridViewCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
        dataGridViewCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
        dataGridViewCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
        dataGridViewCellStyle.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
        grid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle;
        grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        //grid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        //this.cbDG});


        hideDGColumn(grid, "Counter");
        SetFontAndColors(grid);
        lockDataGrid(grid);
        BindingSource source = new BindingSource();
        source.DataSource = dt;
        grid.Dock = DockStyle.Fill;
        grid.DataSource = source;

    }

谢谢

配置网格后,是否尝试将tab.Controls.Add(网格)语句移动到

另外,我注意到您正在使用“SuspendLayout()”来允许无闪烁更新。您是否记得再次打开布局

例如,这:

myTabPage.SuspendLayout();
tabControlNonQueued.TabPages.Add(myTabPage);
DataGridView grid = new DataGridView();

// ... grid configuration and setup here ...

tab.Controls.Add(grid);
myTabPage.ResumeLayout();
tab.Refresh();

我做了你建议的所有改变。我添加了ResumeLayout,还刷新并将DataGridView添加移动到了最后。这没有帮助。dataGridView不会显示在动态添加的选项卡页上。感谢验证,我添加了一个复选框控件,它被添加并正确显示。私有void loadDataGridToTab(DataTable dt,TabPage tab,string tabName){DataGridView grid=new DataGridView();System.Windows.Forms.CheckBox cbSelectAll=new System.Windows.Forms.CheckBox();tab.Controls.Add(cbSelectAll);tab.Controls.Add(grid);是否有可能将DataGridView添加到错误的父级?例如,选项卡控件由以下内容组成:(1)选项卡控件本身,(2)页面,(3)页面中的子元素。我注意到此代码只使用变量“tab”-是否可能不是正确的元素?另外,请尝试阅读:-在显示选项卡页面之前,您可能无法添加元素。您可能需要将代码移动到“TabPageSelected”中事件。我必须将其设置为可见。即使我在添加到选项卡之前将其设置为可见。我已将其设置为在添加到选项卡之后可见,现在也是GridView show.tab.Refresh();grid.Visible=true;谢谢Ted。请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。-这可能会有所帮助。