none
Поиск символа и удаление строки. Ошибка RRS feed

  • Вопрос

  • Для поиска символа "/" и удаления соответствующей строки использую такой код:

     

    string simvol = "/";

     

                for (int i = 0; i < dataGridView1.RowCount; i++)

                {

                    if (dataGridView1[1, i].FormattedValue.ToString().Contains(simvol))

                    dataGridView1.Rows.RemoveAt(i);

     

                }

    Всё работает, но пару строк на 30-40 удалённых всё же остаётся. Ваще загадка конешь как это возможно))) Если строку подсвечивать:

    if (dataGridView1[1, i].FormattedValue.ToString().Contains(simvol))

                        dataGridView1[1, i].Style.BackColor = Color.Yellow;

    }

    то подсвечивается всё корректно, а вот с удалением проблема. Из ха чего это может быть? Как лечится? Может проще удалить строки с жёлтыми ячейками? Тогда может кто подскажет как это сделать? ))) Буду признателен за помощь.

    15 октября 2011 г. 3:25

Ответы

  •             for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (dataGridView1[1, i].FormattedValue.ToString().Contains(simvol))
                    {
                                    dataGridView1.Rows.RemoveAt(i);
                                    i--;
                    }
                }
    

    • Помечено в качестве ответа Cloud_77 15 октября 2011 г. 7:10
    15 октября 2011 г. 6:01
  • Он имел ввиду пробежаться в цикле в обратном порядке. В вашем первоначальном варианте - если две строки идут одна за другой и вы удаляете первую, на вторую цикл уже не попадет, т.к. индекс изменился её с n на n-1.
    • Помечено в качестве ответа Cloud_77 15 октября 2011 г. 7:09
    15 октября 2011 г. 6:59

Все ответы

  •             for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (dataGridView1[1, i].FormattedValue.ToString().Contains(simvol))
                    {
                                    dataGridView1.Rows.RemoveAt(i);
                                    i--;
                    }
                }
    

    • Помечено в качестве ответа Cloud_77 15 октября 2011 г. 7:10
    15 октября 2011 г. 6:01
  •             for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (dataGridView1[1, i].FormattedValue.ToString().Contains(simvol))
                    {
                                    dataGridView1.Rows.RemoveAt(i);
                                    i--;
                    }
                }
    

    ... неудалось пока увидеть результат, минуты 4 уже жду))
    15 октября 2011 г. 6:20
  •             for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (dataGridView1[1, i].FormattedValue.ToString().Contains(simvol))
                    {
                                    dataGridView1.Rows.RemoveAt(i);
                                    i--;
                    }
                }
    

    ... неудалось пока увидеть результат, минуты 4 уже жду))
    Ну сбрасывает цикл на 0, непонятно ваще чё за ответ.
    • Изменено Cloud_77 15 октября 2011 г. 6:51
    15 октября 2011 г. 6:32
  • Он имел ввиду пробежаться в цикле в обратном порядке. В вашем первоначальном варианте - если две строки идут одна за другой и вы удаляете первую, на вторую цикл уже не попадет, т.к. индекс изменился её с n на n-1.
    • Помечено в качестве ответа Cloud_77 15 октября 2011 г. 7:09
    15 октября 2011 г. 6:59