C#Winform -DataGridView hide/UND渲染问题
当我解开一些专栏然后重新隐藏它们时,我会发生一件奇怪的事情。 (如下所示)
图像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
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();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题解决了!
=> 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 !