简体   繁体   中英

C# winform - Datagridview hide/unhide rendering problem

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在此处输入图像描述 Image 2 : when columns are unhidden, all is OK - perhaps strange that the images sudenly have a gray background. 在此处输入图像描述 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! 在此处输入图像描述

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

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 !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM