C#Winform -DataGridView hide/UND渲染问题

发布于 2025-02-03 06:17:41 字数 7430 浏览 2 评论 0原文

当我解开一些专栏然后重新隐藏它们时,我会发生一件奇怪的事情。 (如下所示)

图像1:原始情况,列是隐藏的,一切还可以 图像2:当列不底定时,一切都很好 - 也许奇怪的是图像具有灰色的背景。 图3:返回原始情况,其中一些列隐藏=> 旧文本仍然显示在图像所在的位置!

在隐藏/未置列的末尾,我添加了刷新方法。没有该方法,文本也出现。

            ....
        Herstellingen_dgOverzicht.Columns["OverzichtHerstellingen_Login_Ingave_Afgehandeld"].Visible = OverzichtHerstellingen_ToonAlleKolommen.Checked;
        Herstellingen_dgOverzicht.Columns["OverzichtHerstellingen_Datum_Afgehandeld"].Visible = OverzichtHerstellingen_ToonAlleKolommen.Checked;

        Herstellingen_dgOverzicht.Refresh();

除图像列外,所有列都绑定到数据源(数据词),因为所示的图像是在运行时计算的,并且取决于其他列的值。

感谢您的任何输入!

更新:添加图像的代码:

    private void Herstellingen_dgOverzicht_Inzetten_Icoontjes()
    {
        //Herstellingen_dgOverzicht.SuspendLayout();
        Herstellingen_dgOverzicht.CellValueChanged -= Herstellingen_dgOverzicht_CellValueChanged;
        foreach (DataGridViewRow r in Herstellingen_dgOverzicht.Rows)
        {
            r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = new Bitmap(1, 1);
            r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = new Bitmap(1, 1);
            r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = new Bitmap(1, 1);
            r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "";
            r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "";
            r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "";
            Application.DoEvents();
            // Goedkeuring
            if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "B") // wachten na doorgeven van bestek
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.Euro; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "Wachten op bestek van de leverancier";
                Application.DoEvents();
            }
            else if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "W") // wachten op goedkeuring van de ouders
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.unknown; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "Wachten op antwoord van de ouders"; 
                Application.DoEvents();
            }
            else if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "G") // goedgekeurd
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.ok; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "ok";
                Application.DoEvents();
            }
            else if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "A") // afgekeurd
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.nok; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "niet ok";
                if (r.Cells["OverzichtHerstellingen_EigendomLL"].Value.ToString() == "True")
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.nok; 
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "niet ok";
                }
                Application.DoEvents();
            }
            else // fout -> niks inzetten
            {  }

            if (!string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString()) &&
                r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() != "B" && // verder invullen als er leeg laten als er niet gewacht wordt op antwoord van de ouders op een bestek
                r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() != "W") // vreemd gedrag SQL-server => kleine b komt voor op één of andere manier)
            {
                // Hersteld
                if (string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString()))
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.unknown; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "onbekend";
                }
                else if (r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString() == "True")
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.ok; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "ok";
                }
                else if (r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString() == "False")
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.nok; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "niet ok";
                }
                else
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.unknown; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "onbekend";
                }
                Application.DoEvents();
            }

            if (!string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString()) &&
                !string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString()))
            {
                // Afgehandeld
                if (r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value != null && r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value.ToString() == "True")
                {
                    r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = Resources.ok; r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "ok";
                }
                else if (r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value != null && r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value.ToString() == "False")
                {
                    r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = Resources.nok; r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "niet ok";
                }
                else // (r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value.ToString() == "False")
                {
                    r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = Resources.unknown; r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "onbekend";
                }
                Application.DoEvents();
            }
            //Application.DoEvents();
        }
        Herstellingen_dgOverzicht.CellValueChanged += Herstellingen_dgOverzicht_CellValueChanged;
        //Herstellingen_dgOverzicht.ResumeLayout();
    }

I have a strange thing happening when I unhide some columns and then re-hide them...
(read below)

Image 1 : original situation, columns are hidden, all is OK
enter image description here
Image 2 : when columns are unhidden, all is OK - perhaps strange that the images sudenly have a gray background.
enter image description here
Image 3 : back to the original situation with some columns hidden => old text still shows on the datagrid on the place where the images are!
enter image description here

At the end of hiding/unhiding columns I added the refresh-method. Without the method, the text appears also.

            ....
        Herstellingen_dgOverzicht.Columns["OverzichtHerstellingen_Login_Ingave_Afgehandeld"].Visible = OverzichtHerstellingen_ToonAlleKolommen.Checked;
        Herstellingen_dgOverzicht.Columns["OverzichtHerstellingen_Datum_Afgehandeld"].Visible = OverzichtHerstellingen_ToonAlleKolommen.Checked;

        Herstellingen_dgOverzicht.Refresh();

All columns are bound to a datasource (datatable), except for the image-columns because the image shown is computed at runtime and depends on the value of other columns.

Thanks for any input !

Update: code for adding the images:

    private void Herstellingen_dgOverzicht_Inzetten_Icoontjes()
    {
        //Herstellingen_dgOverzicht.SuspendLayout();
        Herstellingen_dgOverzicht.CellValueChanged -= Herstellingen_dgOverzicht_CellValueChanged;
        foreach (DataGridViewRow r in Herstellingen_dgOverzicht.Rows)
        {
            r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = new Bitmap(1, 1);
            r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = new Bitmap(1, 1);
            r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = new Bitmap(1, 1);
            r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "";
            r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "";
            r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "";
            Application.DoEvents();
            // Goedkeuring
            if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "B") // wachten na doorgeven van bestek
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.Euro; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "Wachten op bestek van de leverancier";
                Application.DoEvents();
            }
            else if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "W") // wachten op goedkeuring van de ouders
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.unknown; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "Wachten op antwoord van de ouders"; 
                Application.DoEvents();
            }
            else if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "G") // goedgekeurd
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.ok; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "ok";
                Application.DoEvents();
            }
            else if (r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() == "A") // afgekeurd
            {
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].Value = Resources.nok; 
                r.Cells["OverzichtHerstellingen_Goedkeuring_Icoon"].ToolTipText = "niet ok";
                if (r.Cells["OverzichtHerstellingen_EigendomLL"].Value.ToString() == "True")
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.nok; 
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "niet ok";
                }
                Application.DoEvents();
            }
            else // fout -> niks inzetten
            {  }

            if (!string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString()) &&
                r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() != "B" && // verder invullen als er leeg laten als er niet gewacht wordt op antwoord van de ouders op een bestek
                r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString() != "W") // vreemd gedrag SQL-server => kleine b komt voor op één of andere manier)
            {
                // Hersteld
                if (string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString()))
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.unknown; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "onbekend";
                }
                else if (r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString() == "True")
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.ok; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "ok";
                }
                else if (r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString() == "False")
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.nok; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "niet ok";
                }
                else
                {
                    r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].Value = Resources.unknown; r.Cells["OverzichtHerstellingen_LaptopHersteld_Icoon"].ToolTipText = "onbekend";
                }
                Application.DoEvents();
            }

            if (!string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_GoekKeuring_Status"].Value.ToString()) &&
                !string.IsNullOrEmpty(r.Cells["OverzichtHerstellingen_Laptop_Hersteld"].Value.ToString()))
            {
                // Afgehandeld
                if (r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value != null && r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value.ToString() == "True")
                {
                    r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = Resources.ok; r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "ok";
                }
                else if (r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value != null && r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value.ToString() == "False")
                {
                    r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = Resources.nok; r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "niet ok";
                }
                else // (r.Cells["OverzichtHerstellingen_Laptop_Afgehandeld"].Value.ToString() == "False")
                {
                    r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].Value = Resources.unknown; r.Cells["OverzichtHerstellingen_Afgewerkt_Icoon"].ToolTipText = "onbekend";
                }
                Application.DoEvents();
            }
            //Application.DoEvents();
        }
        Herstellingen_dgOverzicht.CellValueChanged += Herstellingen_dgOverzicht_CellValueChanged;
        //Herstellingen_dgOverzicht.ResumeLayout();
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰火雁神 2025-02-10 06:17:41

问题解决了!

=> datagrid.refresh();没关系,因为它是无效和更新的收缩
刷新doc ):....迫使控制无效其客户区域,并立即重新绘制自身和任何子女控制。

解决方案:我将资源 - 元素从PNG修改为BMP!

The problem is solved !

=> datagrid.Refresh(); is OK since it is a contraction of Invalidate and Update
(Refresh doc) : .... Forces the control to invalidate its client area and immediately redraw itself and any child controls.

Solution : I modified the resource-icons from PNG to BMP !

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文