在添加了阈值数量的控件后,控制面板中的重叠

时间:2014-12-08 06:17:37

标签: c# winforms datagridview controls panel

我写了一个商店程序,它返回一组表格及其名称。

我将它们渲染成一个面板。对于表名,我有一个标签,其中包含值"表名:"和一个实际保存表名的TextBox控件。接下来,有一个DataGridView来保存表数据。您可以在下面看到它的显示方式:

How the information is displayed

现在发生的是非常大的返回结果,在以控件的形式呈现数据之后,一些控件在Panel的底部重叠。您可以在下图中看到:

The Overlapping of controls 基本上,DataGridView,Label和TextBox控件正在重叠。我不知道这个问题的原因是什么。

将近576个表,即49980行作为要呈现的数据返回。

这是我用于在Panel中呈现控件的代码。

int Offset = 0, RowCount = 0;
GridPanel.Controls.Clear();
foreach (DataTable table in ds.Tables)
{
    RowCount += table.Rows.Count;
    if (table.Rows.Count == 1 && table.Columns.Count == 1 && table.Columns[0].ColumnName.Equals("Table Name"))
    {
        Label label = new Label();
        label.Text = "Table Name : ";
        label.Width = 100;
        label.Location = new Point(5, Offset + 12);

    TextBox tableName = new TextBox();
    tableName.Text = table.Rows[0].ItemArray[0].ToString();
    tableName.Width = table.Rows[0].ItemArray[0].ToString().Length < 200 ? 200
        : Convert.ToInt32(table.Rows[0].ItemArray[0].ToString().Length * 0.8);
    tableName.ReadOnly = true;
    tableName.BackColor = Color.White;
    tableName.GotFocus += tableName_GotFocus;
    tableName.Location = new Point(label.Width + 10, Offset + 10);

    label.Font = tableName.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold,
        System.Drawing.GraphicsUnit.Point, ((byte)(0)));

    GridPanel.Controls.Add(label);
    GridPanel.Controls.Add(tableName);

    Offset += (10 + tableName.Height + 10);
}
else
{
    DataGridView TableGrid = new DataGridView();
    TableGrid.Width = GridPanel.Width - 20;
    TableGrid.Height = ((table.Rows.Count * 40) < 62 ? 62
        : (table.Rows.Count * 40 + 50 > 300 ? 300
        : (table.Rows.Count * 40 + 50)));
    TableGrid.MinimumSize = new Size(GridPanel.Width - 20, 62);
    TableGrid.MaximumSize = new Size(GridPanel.Width - 20, 300);
    TableGrid.ScrollBars = ScrollBars.Both;
    TableGrid.AllowUserToAddRows = false;
    TableGrid.Location = new Point(0, Offset);
    TableGrid.DataSource = table;

    GridPanel.Controls.Add(TableGrid);

    Offset += TableGrid.Height;
}
}
MessageBox.Show(RowCount.ToString());


有谁能请让我知道这里基本上发生了什么。它是可以在Panel中呈现的控件的最大限制,还是我的代码中的任何错误?

1 个答案:

答案 0 :(得分:0)

使用flowLayoutPanel代替面板。