/ / Kontrolki nakładające się na panel po dodaniu do niego progowej liczby kontrolek - c #, winforms, datagridview, formanty, panel

Kontrolki nakładające się na panel po dodaniu do niego progowej liczby kontrolek - c #, winforms, datagridview, formanty, panel

Napisałem procedurę składowania, która zwraca grupę tabel i ich nazwy.

Tworzę je w panelu. Dla nazwy tabeli mam etykietę, która zawiera wartość „Nazwa tabeli:” i kontrolkę TextBox, która faktycznie zawiera nazwę tabeli. Następnie pojawia się DataGridView, który przechowuje dane tabeli. Możesz zobaczyć, jak jest wyświetlana poniżej:

Jak wyświetlane są informacje

Teraz to, co się dzieje, jest bardzo dużewynik, po renderowaniu danych w postaci elementów sterujących, niektóre elementy sterujące nakładają się na dół panelu. Widać to na poniższym obrazku:

Nakładanie się kontrolek Zasadniczo kontrolki DataGridView, Label i TextBox nakładają się na siebie. Nie wiem, co jest przyczyną tego problemu.

Prawie 576 tabel, tj. 49980 wierszy, jest zwracanych jako dane do renderowania.

Oto kod, którego użyłem do renderowania elementów sterujących w panelu.

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());


Czy ktoś może mi dać pojęcie o tym, co w zasadzie dzieje się tutaj. Czy jest to maksymalny limit kontrolek, które mogą być renderowane w panelu, czy jest to jakikolwiek błąd w moim kodzie?

Odpowiedzi:

0 dla odpowiedzi № 1

Użyj flowLayoutPanel zamiast panelu.