Sơ Mi Tv Ответов: 3

Метки рассчитывать и сравнивать числа в [C#]


Я создаю программное обеспечение для управления работой и у меня есть небольшая проблема следующим образом:

У меня есть метка "Hard work" display и 1 Data_Gird_view , я хочу показать форму, если есть строка >= 30 в столбце "Общее время", то метка "Hard work" +1

Если есть 4 строки >= 30, то метка "тяжелая работа" +4

Но я не знаю, какая строка будет сравнивать целое число со столбцом в Data_Gird_view. Все Пожалуйста помогите или предложите мне

Please see the picture below to understand what I mean


https://ibb.co/qJLQ1fh
As shown in the picture above. in column "Total Time" I have 4 rows greater than 30. so I want label HarkWork = 4


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

<pre>db.fillDataGridView("select * from [tbl_RequestSMT]", dataGridView1);
            
            IEnumerable<DataGridViewRow> rows = dataGridView1.Rows

         .Cast<DataGridViewRow>()
         .Where(r => r.Cells["TotaTime"].Value.ToString().Equals("30"));


            if (rows.Count() == 0)
            {
                // Not Found .
                
            }

            else
            {
                // Found
                // if label "Hard Work ++"  but i don't know code here :(

                
            }

BillWoodruff

ссылка на картинку не работает

Sơ Mi Tv

Вы можете скопировать и вставить новый браузер тегов

3 Ответов

Рейтинг:
2

BillWoodruff

 // assume the Label is named 'lblHardWorkCount

const string HardWorkLabelText = "Hard Work Count: {0}";
const int HardWorkThreshold = 30;

// to be executed in some method or event handler:

IEnumerable<DataGridViewRow> rows = dataGridView1.Rows.Cast<DataGridViewRow>().Where(r => ((Int32) r.Cells["TotalTime"].Value) >= HardWorkThreshold);

lblHardWorkCount.Text = string.Format(HardWorkLabelText, rows.Count());
Примечание: Я предлагаю вам обернуть это в блок try-catch во время разработки на случай, если у вас есть плохие данные.


Sơ Mi Tv

Я пробовал код, но не запускал. появляются ошибки:
-Система.InvalidCastException: "указанное приведение недопустимо".

Я стараюсь breackpoint &ГТ; интерфейс IEnumerable&ЛТ;ячейки datagridviewrow&ГТ; строк = dataGridView1.Строк.Бросание&ЛТ;ячейки datagridviewrow и GT;().Где(Р =&ГТ; ((инт)Р.Ячейки["TotalTime"].Value) == HardWorkThreshold);


результаты: строки нулем

BillWoodruff

код, который вы показываете, не совпадает с кодом, который я опубликовал: я проверил, что этот код работает против DataGridView со столбцом типа Int32.

Столбец называется "общее время" или "TotalTime" ?

Sơ Mi Tv

Столбцы в моем Datagirdview называются "TotalTime" или [07]. Я попробовал 2 имени но не побежал

Sơ Mi Tv

Я также попробовал ваш код, но результаты все те же

BillWoodruff

затем вам нужно тщательно изучить структуру вашего DataGridView. есть ли у вас целочисленный столбец с именем "TotalTime" ?

поместите точки останова в свой код и сделайте один шаг через него: точно определите, где происходит ошибка.

я Гарантирую Вам, что код, который я разместил, работает !

Sơ Mi Tv

Я обновляю код ниже,пожалуйста, смотрите и помогите мне это исправить
особая благодарность!

Рейтинг:
0

Gerry Schmitz

Просто покажите "всего строк" и номер / индекс текущей / выбранной строки; например, "15 из 34". (Если пользователь изменяет размер экрана, ваши калькуляторы все равно отключаются).


Sơ Mi Tv

У меня уже есть ярлык total lines. Но мне нужно показать трудную работу в другой метке (если на столбцах Общее время есть столбцы >= 30, метки "трудная работа ++")

Рейтинг:
0

Sơ Mi Tv

Ниже приведен исходный код использования в проекте. пожалуйста смотрите и помогите мне это исправить:
Изображения:
https://ibb.co/ssP8VqG
https://ibb.co/dGjFFwp
(Пожалуйста, скопируйте и вставьте новый тег browse)


public void BtnSearch_Click(object sender, EventArgs e)

       {
           db = new DbConnector();
           lbTotal.Text = "00";

           db.fillDataGridView("select *from tbl_WorkLoad where TimeComplete Between'" + dateTimePicker1.Value.ToString("dd-MM-yy| HH:mm:tt") + "' and '" + dateTimePicker2.Value.ToString("dd-MM-yy| HH:mm:tt") + "'", dataGridView1);
           const string HardWorkLabelText = "Hard Work Count: {0}";
           const int HardWorkThreshold = 30;

           try
           {
               IEnumerable<DataGridViewRow> rows = dataGridView1.Rows.Cast<DataGridViewRow>().Where(r => ((Int32)r.Cells["TotalTime"].Value) >= HardWorkThreshold);

               lbHardwork.Text = string.Format(HardWorkLabelText, rows.Count());

               {
                   for (int i = 0; i < dataGridView1.Rows.Count; i++)
                   {
                       lbTotaltime.Text = (Convert.ToString(double.Parse(lbTotaltime.Text) + double.Parse(dataGridView1.Rows[i].Cells[7].Value.ToString())));

                   }

                   {
                       int iCount = 0;
                       for (int i = 0; i <= dataGridView1.RowCount - 1; i++)
                       {
                           if (dataGridView1.Rows[i].Cells[0].Value != null)
                           {
                               //if ((bool)dataGridView1.Rows[i].Cells[0].Value)
                               //{

                               //}
                               iCount++;
                               lbTotal.Text = iCount.ToString();
                           }
                           else continue;
                       }

                   }
               }
           }
           catch (Exception ex)
           {

               MessageBox.Show(ex.Message.ToString());
           }
       }


BillWoodruff

Я хотел бы помочь вам, но, вероятно, сделал все, что мог. Предложение:

1. обновите свой исходный пост информацией, содержащейся в этом посте, а затем удалите этот пост: этот пост не является решением проблемы.

2. поставьте точку останова в начале метода, затем одноступенчато (F11) продумайте код: исследуйте значения на каждом шаге в поисках неожиданных результатов. определите, где именно возникает ошибка.

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

4. Убедитесь, что данные в столбце TotalTime действительно являются "нормальной" строкой, представляющей только целочисленные значения.