c#datagrid的问题

时间:2011-01-14 11:56:38

标签: c# winforms datagridview

我有一个事件在树视图节点点击时触发,然后创建一个datagridview并将其添加到面板:

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

然后添加新的datagrid:

 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传递到datagrid类。

2 个答案:

答案 0 :(得分:2)

您的代码不完整。 “datagrid”究竟指的是什么以及它是如何启动/处置的?在你的活动?那你为什么不处理删除/添加呢?

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

你在这里基本上做的只是删除元素然后再添加它。 你应该在活动开始前拨打第一行,我想你已经完成了。

此外,我认为你没有正确地做事:为什么要删除/添加你的DGV并用相同的组件替换它。不应该这样。因为看起来你正在处理相同类型的数据,所以你应该只在不触及DataGridView的情况下影响DataTable

编辑:

根据您的编辑和评论,这应该更有意义:

panel4.Controls.Remove(datagrid);
datagrid=file.returnDatagrid();
panel4.Controls.Add(datagrid);
panel4.Invalidate();

答案 1 :(得分:1)

您正在移除并阅读相同的datagrid

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

此代码中没有任何地方更新datagrid,因此您尝试删除Controls中不存在的内容,然后添加它。

在更新变量之前,您需要将 datagrid传递给Remove或将其删除:

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