c # Проблемы с сеткой данных - PullRequest
0 голосов
/ 14 января 2011

У меня есть событие, которое срабатывает после щелчка по узлу дерева, затем создается сетка данных и добавляется в панель:

void tvd_NodeClickEvent(double animal, string experiment, string pluginIdentifier)
    {

        DataGridDisplay dgv = new DataGridDisplay(panel4);
        dgv.addDatagrid(animal, experiment, pluginIdentifier);

    }

Я пытаюсь удалить старую сетку данных, выполнив следующие действия:

panel4.Controls.Remove(datagrid);
        panel4.Invalidate();

И затем добавление новой сетки данных:

 panel4.Controls.Add(datagrid);

Проблема в том, что сетки данных рисуют себя поверх друг друга, не удаляя старый?Есть идеи?

Спасибо.

РЕДАКТИРОВАТЬ: добавлен дополнительный код

void ConfigureDatagrid()
    {
        datagrid.Resize += new EventHandler(datagrid_Resize);

        panel4.Controls.Remove(datagrid);
        panel4.Invalidate();
        datagrid.Location = new System.Drawing.Point(0, 40);
        panel4.Controls.Add(datagrid);

        columnsWidth = datagrid.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);

        checkDatagridControls();

        datagrid.ScrollBars = ScrollBars.Both;
        datagrid.Anchor = (AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right);
        datagrid.Dock = (DockStyle.Top);

        AdjustDatagridHeight();
        AdjustDatagridWidth();

        datagrid.RowHeadersVisible = false;

        datagrid.AutoResizeColumnHeadersHeight();

    }

Приведенный выше код вызывается после получения новой сетки данных как таковой:

datagrid = file.returnDatagrid(mouse, experiment);
        ConfigureDatagrid();

Панель передается из Winform в класс сетки данных.

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Ваш код не завершен. К чему конкретно относится «датагрид» и как он инициируется / утилизируется? в вашем случае? Тогда почему бы вам не обработать удаление / добавление туда?

panel4.Controls.Remove(datagrid);
panel4.Controls.Add(datagrid);

То, что вы в основном делаете здесь, это просто удаляет элемент, а затем снова добавляет его. Вам следует позвонить на первую линию перед вашим мероприятием, и я думаю, что вы закончили.

Кроме того, я думаю, что вы все делаете неправильно: зачем все-таки удалять / добавлять DGV и заменять его теми же компонентами. Так НЕ должно быть. так как кажется, что вы обрабатываете данные того же типа, то вы должны воздействовать на DataTable только без касания DataGridView

РЕДАКТИРОВАТЬ:

Согласно вашим изменениям и комментариям, это должно иметь больше смысла:

panel4.Controls.Remove(datagrid);
datagrid=file.returnDatagrid();
panel4.Controls.Add(datagrid);
panel4.Invalidate();
1 голос
/ 14 января 2011

Вы удаляете и читаете одно и то же datagrid:

    panel4.Controls.Remove(datagrid);
    panel4.Invalidate();
    datagrid.Location = new System.Drawing.Point(0, 40);
    panel4.Controls.Add(datagrid);

нигде в этом коде вы не обновляете datagrid, поэтому вы пытаетесь удалить то, чего нет в Controls, а затем добавляете это.

Вам необходимо получить old datagrid для передачи на Remove или удалить его перед обновлением переменной:

    panel4.Controls.Remove(datagrid);
    datagrid=file.returnDatagrid();
    datagrid.Location = new System.Drawing.Point(0, 40);
    panel4.Controls.Add(datagrid);
    panel4.Invalidate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...