Удалить все строки начиная со строки i в таблице (C#)

  • Автор темы Автор темы ial1408
  • Дата начала Дата начала

ial1408

Client
Регистрация
26.07.2016
Сообщения
213
Реакции
22
Баллы
18
Всем доброго дня. Подскажите пожалуйста. Всю голову уже сломал. Мне надо удалить все строки из таблицы начиная с определенной строки. Код прилагаю. Он обрабатывает как то странно. По проверке через SendInfoToLog все хорошо, а по факту удаляет не все.

Код:
Развернуть Свернуть Копировать
IZennoTable tblResult = project.Tables["Result"];
string strLeads = project.Variables["cfg_int_leads"].Value;
int intLeads = Convert.ToInt32(strLeads);
int j=tblResult.RowCount;
for (int i=intLeads; i<j; i++){
    tblResult.DeleteRow(i);
    project.SendInfoToLog(String.Format("Удалили {0} строку",(i+1).ToString()));
}
 
Последнее редактирование:
Все работает, спасибо. Не додумался я что то сделать отсчет в обратном порядке. Но почему моя логика не работает все равно не могу понять.
 
Потому что удаляя из таблицы строку с определенным индексом, все последующие строки таблицы поменяют свои индексы (станут на 1 меньше) ... в результате этого смещения и происходит путаница.
Удаляя же строки с конца, никакие другие индексы не меняются, поэтому все работает как нужно
 
  • Спасибо
Реакции: ial1408
Понял. Просто я думал что строка очищается без смещения, ошибался. В любом случае спасибо
 
Привет можно я свои две копейки вставлю? ))
Если задача просто удалить все строки из указанной таблички тогда красивее с точки зрения кода будет сделать так
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["table"];
table.Clear();

Конкретно вашу задачу можно решить вот таким способом коротко и просто )):
C#:
Развернуть Свернуть Копировать
IZennoTable tblResult = project.Tables["Result"];
string strLeads = project.Variables["cfg_int_leads"].Value;

var deleteRow = tblResult.GetItems(
    strLeads + "-end",//говорим что хотим взять все строки до конца с указанного номера
    true // говорим что хотим удалить эти строки
    );
   
return "OK";

А вот если есть желание как то за мудрено удалять строки из таблички то код ниже думаю будет покрасивее ))):
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["table"];

var deleteRow = table.GetItems(
    "ALL", // взять все строки из таблицы
/*
    вместо первого аргумента можно указать так:
    "0-10" - указаный диапазон
    "0-10;23-40" - несколько указанных диапазонов
    "random20" - 20 случайных строк
*/
    true //  удалить все строки если fals тогда строки остануться в табличке
);

То что закомментированно называется "Диапазоны значений" как их использовать можно узнать на страничке в зенновики http://zennolab.com/wiki/ru:ranges
 
Последнее редактирование:
C#:
Развернуть Свернуть Копировать
IZennoTable tblResult = project.Tables["Result"];
int intLeads = int.Parse(project.Variables["cfg_int_leads"].Value);
for (int i = intLeads; i < tblResult.RowCount; i++) {
    tblResult.DeleteRow(i); i--;
}
UPD. Или так:
C#:
Развернуть Свернуть Копировать
IZennoTable tblResult = project.Tables["Result"];
int intLeads = int.Parse(project.Variables["cfg_int_leads"].Value);
while (tblResult.RowCount > intLeads)
    tblResult.DeleteRow(intLeads);
 
Последнее редактирование:
Всем огромное спасибо за помощь. Вы очень отзывчивое сообщество))
 
  • Спасибо
Реакции: ZHAG и Dimionix

Похожие темы

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