Member 13894223 Ответов: 2

C# listview для окрашивания строк, если column1 больше, чем column2


Я пытаюсь это сделать
получение данных из базы данных slq
Запас и критический предел

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

и есть запас == 0
ряды показывают как малиновые

Что я уже пробовал:

listView2.Items.Clear();
listView2.Columns.Clear();
listView2.Columns.Add("ID", 100);
listView2.Columns.Add("Description", 150);
listView2.Columns.Add("Stock", 150);
listView2.Columns.Add("CriticalLimit", 150);

            string sql2 = @"Select * from tblProduct";
                cm = new SqlCommand(sql2, cn);
                dr = cm.ExecuteReader();
                while (dr.Read() == true)
                {

if ((Convert.ToInt64(dr[9]) <= Convert.ToInt32(dr[8].ToString()))&& Convert.ToInt64(dr[9]) >= 1)
               
 {

lst = listView2.Items.Add(dr[0].ToString());
lst.SubItems.Add(dr[1].ToString());
lst.SubItems.Add(dr[9].ToString());
lst.SubItems.Add(dr[8].ToString());

                    if (Convert.ToInt32(dr[9].ToString()) == 0)
                    {

                        lst.ForeColor = Color.Crimson;


                    }
                    else if (Convert.ToInt32(dr[9].ToString()) < Convert.ToInt32(dr[8].ToString()))
                    {
                        lst.ForeColor = Color.Orange;

                    }
                }
            }
            dr.Close();

Richard MacCutchan

Почему вы преобразуете значения в строки, чтобы преобразовать их обратно в числа?

Member 13894223

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

[no name]

с какой именно проблемой вы столкнулись?

Member 13894223

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

2 Ответов

Рейтинг:
2

Aydin Homay

Привет,

Я не вижу никаких проблем в вашем коде. Вам просто нужно установить listView2.View к View.Details в противном случае он не будет показывать подпункты, а также убедитесь, что ваши разговоры в строке будут работать, это все, что вам нужно. Остальное должно работать так, как вы ожидаете. Однако ваш код можно оптимизировать. Оставьте комментарий, если он не сработал, то я помогу вам больше.

Овации,
АХ


Рейтинг:
0

MiAnjoanina

Привет.
В вашем условном выражении есть ошибка :

Convert.ToInt32(dr[9].ToString())
никогда не будет проверено как "== 0", потому что у вас есть условие ">= 1" позади.

Просто сделай вот так :

//if ((Convert.ToInt64(dr[9]) <= Convert.ToInt32(dr[8].ToString()))&& Convert.ToInt64(dr[9]) >= 1)
//{

lst = listView2.Items.Add(dr[0].ToString());
lst.SubItems.Add(dr[1].ToString());
lst.SubItems.Add(dr[9].ToString());
lst.SubItems.Add(dr[8].ToString());

        if (Convert.ToInt32(dr[9].ToString()) == 0)
        {

            lst.ForeColor = Color.Crimson;


        }
        else if (Convert.ToInt32(dr[9].ToString()) < Convert.ToInt32(dr[8].ToString()))
        {
            lst.ForeColor = Color.Orange;

        }
        
    }
//}



BR