我写了一个商店程序,它返回一组表格及其名称。
我将它们渲染成一个面板。对于表名,我有一个标签,其中包含值"表名:"和一个实际保存表名的TextBox控件。接下来,有一个DataGridView来保存表数据。您可以在下面看到它的显示方式:
现在发生的是非常大的返回结果,在以控件的形式呈现数据之后,一些控件在Panel的底部重叠。您可以在下图中看到:
基本上,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中呈现的控件的最大限制,还是我的代码中的任何错误?
答案 0 :(得分:0)
使用flowLayoutPanel代替面板。