Неправильный Fontstyle в цикле foreach с операторами If - PullRequest
2 голосов
/ 08 декабря 2011

Возможно, мне не хватает чего-то очень простого, но я не могу заставить его работать должным образом.

Я заполняю 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 строки:

А) повестка дня с приоритетом 1

B) повестка дня с приоритетом 0

Он пройдет первый, корректирует цвет, делает его жирным. Но тогда и второй тоже будет жирным. Если я изменю их так, что первый будет иметь приоритет 0, оба будут обычными.

У меня могут быть все типы событий, все будут жирными или обычными, все будут иметь правильные настройки цвета. Но когда у меня есть секунда того же типа (DBS, повестка дня, remoteLogin или SMS), второй и т. Д. Будет иметь тот же шрифт, что и первый.

Так что эта партия будет делать следующее:

[DBS - 1] -> Правильный цвет и жирный (правильный)

[повестка дня - 0] -> Правильный цвет и регулярный (правильный)

[смс - 1] -> Правильный цвет и жирный (правильный)

[remoteLogin - 0] -> Правильный цвет и обычный (правильный)

[DBS - 0] -> Правильный цвет и полужирный (неправильный шрифт!)

[повестка дня - 1] -> правильный цвет и обычный (неправильный шрифт!)

Надеюсь, у меня есть смысл объяснять. Может быть, я не вижу чего-то или я хочу что-то глупое. Может быть, кто-то может сказать мне, что не так. код может быть не лучшим сейчас, так как я внес много изменений, пытаясь заставить его работать.

Edit: Я только что заметил, что он делает foreach правильно, но когда он встречает второй тип того же типа, он также изменит шрифт предыдущего. Может быть, я могу обойти это.

Спасибо заранее! Mike

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Ваши & должны быть &&, я подозреваю.

0 голосов
/ 09 декабря 2011

Я понял.

Я создаю DefaultCellStyle с цветами для каждого элемента (DBS, повестка дня и т. Д.) Затем я изменяю шрифт этого DefaultCellStyle на Bold или обычный.Когда цикл foreach встречает вторую строку того же типа.Он загружает тот же DefaultCellStyle, скажем, «DBS», как и другой.Внутри этого я настраиваю Fontstyle.Поскольку я теперь обновляю Fontstyle внутри элемента «DBS», это затрагивает все строки с «DBS» DefaultCellStyle.Я думаю, что единственный способ обойти это - сделать разные DefaultCellStyle для каждой опции в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...