Удалить строку в таблице

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Есть код, который должен удалять строки, если в этой строке в девятом столбце текст ячейки "0".
Но почему то цикл останавливается после первого выполнения(удаляет одну строку и заканчивает работу), в чем может быть проблема?

PHP:
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["TM"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for (int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем ячейку
        if (cells[9]=="0")
        sourceTable.DeleteRow(i);
    }
}
 

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Иногда начинает удалять кусками, т.е. цикл выполняется, но не весь, как это вообще возможно?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113
Потому что необходимо идти снизу вверх.
По Вашей схеме, удаляя, например, вторую строку, на её место встает следующая, но цикл её уже не обработает, так как она сместилась на позицию выше, которая уже пройдена.
 
  • Спасибо
Реакции: Art4D

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Работает, спс
PHP:
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["TM"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i = sourceTable.RowCount - 1; i>=0; i--)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем ячейку
        if (cells[9]!="0")
        sourceTable.DeleteRow(i);
    }
}
 
  • Спасибо
Реакции: ibred

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 104
Баллы
113
Потому что необходимо идти снизу вверх.
Не обязательно!
C#:
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["TM"];
// ищем в каждой строчке в таблице
lock (SyncObjects.TableSyncer)
{
    for (int i = 0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем ячейку
        if (cells[9] == "0")
        {
            sourceTable.DeleteRow(i);
            i--;
        }
    }
}
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113
  • Спасибо
Реакции: Dimionix

Artamosa

Client
Регистрация
31.01.2016
Сообщения
59
Благодарностей
4
Баллы
8
Друзья, помогите сниппетом чтобы удалялись строки из таблицы если в колонке C содержится промежуток от 1 до 20?
А еще та же задача, но в колонке B содержится слово "en"
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)