Доработать сниппет: Брать определенную строку.

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Друзья, помогите кто чем может. )) Есть такой сниппет, нужно брать перву строку у которой в ячейке AD_MESSAGE_STATUS стоит "1"

C#:
lock (SyncObjects.TableSyncer)
{

    // берем первую строку с удалением и раскидываем значения по переменным
    var row = project.Tables["AdMessageList"].GetRow(0).ToList();
    project.Tables["AdMessageList"].DeleteRow(0);
    project.Variables["AD_MESSAGE_TEXT"].Value = row[0];
    project.Variables["AD_MESSAGE_LAST_POST"].Value = row[1];
    project.Variables["AD_MESSAGE_STATUS"].Value = row[2];

    // возвращаем строку в конец таблицы
    project.Tables["AdMessageList"].AddRow(project.Variables["AD_MESSAGE_TEXT"].Value + "\t" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "\t" + project.Variables["AD_MESSAGE_STATUS"].Value);
}
 

volody00

Client
Регистрация
06.09.2016
Сообщения
793
Благодарностей
812
Баллы
93
попробуй так (не проверял):
C#:
lock (SyncObjects.TableSyncer)
{
    for(int i=0;i<project.Tables["AdMessageList"].RowCount;i++)
    {
        var row = project.Tables["AdMessageList"].GetRow(i).ToList();
    
        project.Variables["AD_MESSAGE_TEXT"].Value = row[0];
        project.Variables["AD_MESSAGE_LAST_POST"].Value = row[1];
        project.Variables["AD_MESSAGE_STATUS"].Value = row[2];
        
        if(project.Variables["AD_MESSAGE_STATUS"].Value.Trim() != "1") continue;
        
        project.Tables["AdMessageList"].DeleteRow(i);
        project.Tables["AdMessageList"].AddRow(project.Variables["AD_MESSAGE_TEXT"].Value + "\t" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "\t" + project.Variables["AD_MESSAGE_STATUS"].Value);
        return "";
        
    }
}
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Добрейшей души человек ты Володя! Сердечно благодарю за помощь! )
 
  • Спасибо
Реакции: Mikhail B.

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Володя, а знаешь, случайно обнаружился косяк. Если в AD_MESSAGE_STATUS значение 0, то берется из таблицы последняя строка, не возвращает ошибку.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
793
Благодарностей
812
Баллы
93
опять лень проверять, должно быть так:

C#:
bool flag = false;
lock (SyncObjects.TableSyncer)
{
    for(int i=0;i<project.Tables["AdMessageList"].RowCount;i++)
    {
        var row = project.Tables["AdMessageList"].GetRow(i).ToList();
    
        project.Variables["AD_MESSAGE_TEXT"].Value = row[0];
        project.Variables["AD_MESSAGE_LAST_POST"].Value = row[1];
        project.Variables["AD_MESSAGE_STATUS"].Value = row[2];
        
        if(project.Variables["AD_MESSAGE_STATUS"].Value.Trim() != "1") continue;
        
        flag=true;
        project.Tables["AdMessageList"].DeleteRow(i);
        project.Tables["AdMessageList"].AddRow(project.Variables["AD_MESSAGE_TEXT"].Value + "\t" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "\t" + project.Variables["AD_MESSAGE_STATUS"].Value);
        return "";
        
    }
}
if(!flag) throw new Exception("ничего не нашли");
 
  • Спасибо
Реакции: one

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