在使用If语句的foreach循环中字体样式不正确



我可能错过了一些非常简单的东西,但我不能让它正常工作。

我正在填充Datagridview。然后我有一个Databindingcomplete事件来遍历行,并根据某些标准为它们提供颜色和字体。

使用以下代码完成:

foreach (DataGridViewRow r in dataGridView1.Rows)
            {
                if ((r.Cells["referrer"].Value.ToString().Contains("DBS")) & (r.Cells["priority"].Value.ToString().Equals("1")))
                {
                    r.DefaultCellStyle = DBS;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Bold);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("DBS")) & (r.Cells["priority"].Value.ToString().Equals("0")))
                {
                    r.DefaultCellStyle = DBS;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Regular);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("agenda")) & (r.Cells["priority"].Value.ToString().Equals("0")))
                {
                    r.DefaultCellStyle = agenda;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Regular);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("agenda")) & (r.Cells["priority"].Value.ToString().Equals("1")))
                {
                    r.DefaultCellStyle = agenda;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Bold);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("sms")) & (r.Cells["priority"].Value.ToString().Equals("1")))
                {
                    r.DefaultCellStyle = sms;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Bold);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("sms")) & (r.Cells["priority"].Value.ToString().Equals("0")))
                {
                   r.DefaultCellStyle = sms;
                   r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Regular);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("remoteLogin")) & (r.Cells["priority"].Value.ToString().Equals("1")))
                {
                    r.DefaultCellStyle = remoteLogin;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Bold);
                }
                else if ((r.Cells["referrer"].Value.ToString().Contains("remoteLogin")) & (r.Cells["priority"].Value.ToString().Equals("0")))
                {
                    r.DefaultCellStyle = remoteLogin;
                    r.DefaultCellStyle.Font = new Font("Arial", 9, FontStyle.Regular);
                }
            }

现在可以工作了。DefaultCellStyle的第一行用于该行的颜色,然后第二行是字体。

一切都很好,颜色很好,大胆的作品,常规的作品,除了一件事。

如果我有2行:

A)优先级为1的议程

B)优先级为0的议程

它会越过第一个,调整颜色很好,使其加粗。然后第二个也是粗体。如果我更改它们,使第一个优先级为0,则两个都将是常规的。

我可以有所有类型的事件,所有将是粗体或常规,所有有正确的颜色设置。但是,当我有相同类型的第二(DBS,议程,remoteLogin或短信)的第二个等将有相同的字体作为第一个。

那么这个批处理将执行以下操作:

[DBS - 1] ->正确的颜色,并加粗(正确)

[议程- 0]->正确的颜色和规则

[sms - 1] ->颜色正确,加粗(正确)

[remoteLogin - 0] ->正确的颜色和规则(正确)

[DBS - 0] ->正确的颜色和粗体(错误的字体!)

[议程- 1]->正确的颜色和规则(错误的字体!)

我希望我的解释有意义。也许我没看到什么,或者我想要一些愚蠢的东西。也许有人能告诉我出了什么事。代码现在可能不是最好的,因为我已经做了很多调整,试图使它工作。

编辑:我只是注意到它确实做foreach正确,但当它遇到相同类型的第二个,它会改变之前的字体。也许我可以解决这个问题。

提前感谢!迈克

我怀疑你的&应该是&&

我明白了。

我为每个项目(DBS,议程等)创建了DefaultCellStyle的颜色,然后我将DefaultCellStyle的字体更改为粗体或常规。当foreach循环遇到相同类型的第二行时。它加载了相同的DefaultCellStyle,比如"DBS"和另一个一样。里面我调整字体样式。因为我现在更新了"DBS"项内的字体样式,所以所有具有"DBS"DefaultCellStyle的行都会受到影响。我认为唯一的方法是使不同的DefaultCellStyle在列表中的每个选项。

最新更新