Мне нужно написать в новой форме имена столбцов datagridview - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно получить имена столбцов и сохранить их в другой форме как метки и получить новое текстовое поле для каждой метки. Итак, я пытаюсь этот код, и это ответ. Я его отладил, все отлично работает. Любые предложения, где проблема может быть? Я получаю только имя первого столбца. enter image description here

        int location = 10;
        int locationHeight = 10;
        int locationHeightlbl = 10;

        TextBox[] txtBox = new TextBox[DM.dataGridView1.Columns.Count];
        Label[] labels = new Label[DM.dataGridView1.Columns.Count];

        foreach (DataGridViewColumn column in DM.dataGridView1.Columns)
        {


            labels[column.Index] = new Label();
            labels[column.Index].Text = column.HeaderText;
            labels[column.Index].Location = new Point(location, locationHeightlbl);

            txtBox[column.Index] = new TextBox();
            txtBox[column.Index].Location = new Point(location, locationHeight + 25);
            this.Controls.Add(labels[column.Index]);
            this.Controls.Add(txtBox[column.Index]);

            locationHeight += 25;
            locationHeightlbl += 25;


        }

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Используете ли TableLayoutPanel в вашем приложении? Я рекомендую использовать это. Посмотрите на код:

        TextBox[] txtBox = new TextBox[DM.dataGridView1.Columns.Count];
        Label[] labels = new Label[DM.dataGridView1.Columns.Count];

        TableLayoutPanel tableLayoutPanel = new TableLayoutPanel() { AutoSize = true };
        tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
        int n = 0;
        foreach (DataGridViewColumn column in DM.dataGridView1.Columns)
        {
            labels[column.Index] = new Label();
            labels[column.Index].Text = column.HeaderText;
            tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
            tableLayoutPanel.SetCellPosition(labels[column.Index], new TableLayoutPanelCellPosition(0, n++));
            tableLayoutPanel.Controls.Add(labels[column.Index]);

            txtBox[column.Index] = new TextBox();
            tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
            tableLayoutPanel.SetCellPosition(txtBox[column.Index], new TableLayoutPanelCellPosition(0, n++));
            tableLayoutPanel.Controls.Add(txtBox[column.Index]);
        }

        Controls.Add(tableLayoutPanel);

Кроме того, рассмотрите возможность использования FlowLayoutPanel.

0 голосов
/ 08 июля 2019

, как уже упоминалось в комментарии. Ваши ярлыки хорошо спрятаны за текстовыми полями. Чтобы решить эту проблему, просто увеличьте приращение:

locationHeight += 50;
locationHeightlbl += 50;

Но я бы предложил в таком сценарии использовать FlowLayoutPanel . Он будет заказывать элементы самостоятельно. Вам нужно только указать FlowDirection. (и это намного меньше кода:)

FlowLayoutPanel panel = new FlowLayoutPanel();
panel.FlowDirection = FlowDirection.TopDown;

foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    panel.Controls.Add(new Label() { Text = column.HeaderText });
    panel.Controls.Add(new TextBox());                
}
this.Controls.Add(panel);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...