C# 如何将DataGridView动态添加到TabPage
我有一个TabControl。 我希望动态添加选项卡页,该选项卡页将动态添加DataGridView。 我可以动态地添加选项卡页面,但是当我将DataGridView添加到动态选项卡页面时,什么都没有显示。 感谢您提供的任何帮助 这是代码C# 如何将DataGridView动态添加到TabPage,c#,windows,datagridview,tabcontrol,tabpage,C#,Windows,Datagridview,Tabcontrol,Tabpage,我有一个TabControl。 我希望动态添加选项卡页,该选项卡页将动态添加DataGridView。 我可以动态地添加选项卡页面,但是当我将DataGridView添加到动态选项卡页面时,什么都没有显示。 感谢您提供的任何帮助 这是代码 myTabPage.SuspendLayout(); tabControlNonQueued.TabPages.Add(myTabPage);
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。请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。-这可能会有所帮助。