Не отображается цвет в datagridview

Может кто знает.Уже 2 дня сижу никак не могу разобраться. Накидал похожий пример (ниже). Эти 2 грида на разных вкладках tabcontrol. При загрузке цвет во второй вкладке не отображается.
    private void Form1_Load(object sender, EventArgs e)
        {
           dataSet1.ReadXml("путь к файлу",XmlReadMode.Auto);
           dataGridView1.DataSource = dataSet1;
           dataGridView1.DataMember = dataSet1.Tables[0].TableName;
           dataSet2.ReadXml("путь к файлу", XmlReadMode.Auto);
           dataGridView2.DataSource = dataSet2;
           dataGridView2.DataMember = dataSet2.Tables[0].TableName;
           for (var i = 0; i < dataGridView1.RowCount; i++)
           {
               if (dataGridView1["приоритет", i].FormattedValue.ToString().Contains("высокий"))
                   dataGridView1["приоритет", i].Style.BackColor = Color.Tomato;
               if (dataGridView1["приоритет", i].FormattedValue.ToString().Contains("средний"))
                   dataGridView1["приоритет", i].Style.BackColor = Color.RoyalBlue;
               if (dataGridView1["приоритет", i].FormattedValue.ToString().Contains("низкий"))
                   dataGridView1["приоритет", i].Style.BackColor = Color.Yellow;
           }
           for (var i = 0; i < dataGridView2.RowCount; i++)
           {
               if (dataGridView2["приоритет", i].FormattedValue.ToString().Contains("высокий"))
                   dataGridView2["приоритет", i].Style.BackColor = Color.Tomato;
               if (dataGridView2["приоритет", i].FormattedValue.ToString().Contains("средний"))
                   dataGridView2["приоритет", i].Style.BackColor = Color.RoyalBlue;
               if (dataGridView2["приоритет", i].FormattedValue.ToString().Contains("низкий"))
                   dataGridView2["приоритет", i].Style.BackColor = Color.Yellow;
           }
14 ответов

попробуйте обозначить событие cellstylechanged для 2го гридавью (пусть мессадж бокс выводит,например), чтобы для начала убедиться, что оно вообще срабатывает. а если срабатывает, надо будет дальше смотреть, мб слетает выделение, так бывает, когда гридвью перересовывается.а открытие вкладки наверняка как раз и вызывает его перересовку.мб надо постоянно инвоукать этот гридвью на выделение, или в какое-нить из его событий повесить


Я дебажил. Он цвет присваивает. А на форме не отображается.


в смысле трассировку делали или точку останова?и вот вообще ничего в гридвью не менялось?а как вы могли это увидеть, если по идее 1ая вкладка была открыта?з.ы.повесьте выделение в событие paint, как вариант


Точку останова ставил. В цикл заходит и цвета расставляет как надо.


Точку останова ставил. В цикл заходит и цвета расставляет как надо.
проверили по переменным в окне locals?


Да. На paint еще вешать не пробовал.


        public Form1()
        {
            InitializeComponent();
 
            DataGridViewRow dr = new DataGridViewRow();
            dataGridView1.Rows.Add(dr);
            DataGridViewRow dr1 = new DataGridViewRow();
            dataGridView1.Rows.Add(dr1);
            DataGridViewRow dr2 = new DataGridViewRow();
            dataGridView1.Rows.Add(dr2);
 
            DataGridViewRow dr3 = new DataGridViewRow();
            dataGridView2.Rows.Add(dr3);
            DataGridViewRow dr4 = new DataGridViewRow();
            dataGridView2.Rows.Add(dr4);
            DataGridViewRow dr5 = new DataGridViewRow();
            dataGridView2.Rows.Add(dr5);
       }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            for (var i = 0; i < dataGridView1.RowCount; i++)
            {
                dataGridView1[0, i].Style.BackColor = Color.Tomato;
            }
            for (var i = 0; i < dataGridView2.RowCount; i++)
            {
                dataGridView2[0, i].Style.BackColor = Color.Tomato;
            }
        }
    }
вот такой код проблем не вызывает, выделение не пропадает.мб как-то с источником связано


Расскажу всю проблему. Меня волнует не столько цвет, сколько рисунки. Код внизу отображает в tabpage2 вместо рисунков красные крестики. У меня 4 похожих грида. В 3х на первой вкладке работает а в 4-ом нет.
            var dgvic = new DataGridViewImageColumn {Name = "выполнение"};
            dgv.Columns.Add(dgvic);
            for (var i = 0; i < dgv.RowCount; i++)
            {
 
                if (dgv["отметка", i].Value.ToString() == "выполнено")
                {
                    dgv["выполнение", i].Value = new Bitmap("../../data/1.bmp");
                }
                else dgv["выполнение", i].Value = new Bitmap("../../data/2.bmp");
            }            dgv.Columns["отметка"].Visible = false;


проект можешь прикрепить?


К сожалению нет. Но готов ответить на все вопросы. Могу что то подобное быстро накидать.


накидай, если не сложно. сам понимаешь, сложно так пальцем в небо тыкать


Все накидал. Проблема вполне описана. Спасибо за уже даные советы!!!


Может кто-нибудь еще поможет с решением этой задачи. Неужели никому не интересно!


мне интересно, но я в полном тупике. причем если перенести все выделения в конструктор, не отобразится вообще ничего, даже на 1ой вкладке. тем не менее, если покопать, станет видно, что цвет поменян, т.е. если вызвать это свойство в мессаджбоксе для ячейки, сообщение покажет, что цвет какой надо. но ничего не отображается! уже ничего не понимаю(