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

ial1408

Client
Регистрация
26.07.2016
Сообщения
196
Благодарностей
18
Баллы
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()));
}
 
Последнее редактирование:

ial1408

Client
Регистрация
26.07.2016
Сообщения
196
Благодарностей
18
Баллы
18
Все работает, спасибо. Не додумался я что то сделать отсчет в обратном порядке. Но почему моя логика не работает все равно не могу понять.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 774
Благодарностей
1 392
Баллы
113
Потому что удаляя из таблицы строку с определенным индексом, все последующие строки таблицы поменяют свои индексы (станут на 1 меньше) ... в результате этого смещения и происходит путаница.
Удаляя же строки с конца, никакие другие индексы не меняются, поэтому все работает как нужно
 
  • Спасибо
Реакции: ial1408

ial1408

Client
Регистрация
26.07.2016
Сообщения
196
Благодарностей
18
Баллы
18
Понял. Просто я думал что строка очищается без смещения, ошибался. В любом случае спасибо
 

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
220
Баллы
43
Привет можно я свои две копейки вставлю? ))
Если задача просто удалить все строки из указанной таблички тогда красивее с точки зрения кода будет сделать так
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
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 125
Баллы
113
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);
 
Последнее редактирование:

ial1408

Client
Регистрация
26.07.2016
Сообщения
196
Благодарностей
18
Баллы
18
Всем огромное спасибо за помощь. Вы очень отзывчивое сообщество))
 
  • Спасибо
Реакции: ZHAG и Dimionix

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