Member 12857358 Ответов: 2

Как набирать левую сторону в строку. На самом деле я хочу подсчитать строку, которая содержит значение " EBC"


for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if(dataGridView1.Rows[i].Cells["Company"].Value == "EBC")
                {
                    int rowcount = dataGridView1.Rows[i].Cells.Count;
                    label6.Text = Convert.ToString(rowcount);
                }
            }


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

Я хочу подсчитать строку, которая имеет значение "EBC", и напечатать ее на этикетке. так что, пожалуйста, помогите...

2 Ответов

Рейтинг:
4

CHill60

Альтернативный подход (не обязательно лучший) заключается в преобразовании столбца datagridview в список, например

const int colWithEbc = 1;

var list = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
       if (row.Cells[colWithEbc].Value != null)
             list.Add(row.Cells[colWithEbc].Value.ToString());
}
или
List<string> list = dataGridView1.Rows
            .OfType<DataGridViewRow>()
            .Where(x => x.Cells[1].Value != null)
            .Select(x => x.Cells[1].Value.ToString())
            .ToList();

А затем просто подсчитайте элементы в списке, которые соответствуют критериям, например
label6.Text  = list.Count(n => n.ToString().Equals("EBC")).ToString();


Member 12857358

Благодаря его работе

Рейтинг:
2

Ramza360

Код, который вы опубликовали, не подсчитывает строки, а подсчитывает количество ячеек в той строке, которая имеет значение EBC. Это то, что вы хотите, или нижеприведенное точно?

Если вы пытаетесь показать rowcount во время цикла, вы просто увеличиваете rowcount на 1 внутри оператора if, а затем устанавливаете текст метки на это число в виде строки. Обратите внимание на использование .ToString () вместо Convert, хотя они дают тот же результат.

int rowCount = 0;

for (int i = 0; i < dataGridView1.Rows.Count; i++){
    if(dataGridView1.Rows[i].Cells["Company"].Value == "EBC"){
        rowCount++;
        label6.Text = rowCount.ToString();
    }
}


В противном случае вы можете выполнить полный цикл и проверки, увеличив количество строк, а затем просто установить метку один раз в конце.
int rowCount = 0;

for (int i = 0; i < dataGridView1.Rows.Count; i++){
    if(dataGridView1.Rows[i].Cells["Company"].Value == "EBC"){
        rowCount++;
    }
}

label6.Text = rowCount.ToString();


Member 12857358

он показывает значение 0, но у меня есть 5 строк, которые содержат значение " EBC"