IZennoList как создать экземпляр?

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Здравствуйте уважаемое сообщество!

В методах работы с Базой Данных ЗенноПостера нужно передавать ссылку на IZennoList /
IZennoTable. Перепробовал многое и так и не смог понять как и где добыть объект который реализует один из интерфейсов. Документацию также пробовал читать, нету там ничего наводящего. Реализовывать интерфейсы самостоятельно мне кажется глупо, должен ведь существовать стандартный способ получения подобного объекта.

Стандартный прием из документации не проходит. (https://help.zennolab.com/en/v5/zennoposter/5.18.0.0/topic746.html)
"var list = project.Lists["List 1"];" - дает ссылку на пустой объект (видимо такого объекта в словаре не существует и он автоматически не создается)

Помогите разобраться пожалуйста. Надеюсь со стандартными средствами обращения к БД ускоряться, а то сейчас приходиться все делать через костыль - https://help.zennolab.com/en/v5/zennoposter/5.18.0.0/topic747.html

Каждую строку ответа приходиться разбивать в соответствии с разделителями(((

Спасибо!
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 233
Благодарностей
5 846
Баллы
113

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
он наверно имеет в виду создание List 1, а не передача List 1 в переменную list

List 1 - у Вас должен быть уже создан через ПМ - визуально.
во всяком случае в справке нет описания создания через код
 
Последнее редактирование:
  • Спасибо
Реакции: VladZen

Duser

Client
Регистрация
11.08.2013
Сообщения
286
Благодарностей
192
Баллы
43
По идее должен был создаваться как-то так project.Lists.Add("list1"), но такого метода нет. Думаю, что внутри зенки он есть, переопределённый и приватный.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Что-то я не очень понял...
Объект IZennoList создается вот так
IZennoList list = project.Lists["List 1"];

Пример здесь:
https://help.zennolab.com/en/v5/zennoposter/5.18.0.0/topic972.html
"var list = project.Lists["List 1"];" - дает ссылку на пустой объект (видимо такого объекта в словаре не существует и он автоматически не создается)
Итак детальней.

Выдает ошибку - "Object reference not set to an instance of an object."

Использую следующий код:

Код:
internal class TestDB
    {
        public static void IZennoList (Instance instance, IZennoPosterProjectModel project) {
            var list = project.Lists["List 1"];
            DB.GetIRow("SELECT * FROM `table`", ref list);
          
            foreach (var item in list) {
                project.SendInfoToLog(item);
            }
        }
    }

public static void GetIRow (string sql, ref IZennoList targetList) {
                ZennoPoster.Db.ExecuteQuery(sql, null, DbProvider.MySqlClient, connStr, ref targetList, sep_row);
            }
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
С IZennoTable та же история.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 233
Благодарностей
5 846
Баллы
113
Итак детальней.

Выдает ошибку - "Object reference not set to an instance of an object."

Использую следующий код:

Код:
internal class TestDB
    {
        public static void IZennoList (Instance instance, IZennoPosterProjectModel project) {
            var list = project.Lists["List 1"];
            DB.GetIRow("SELECT * FROM `table`", ref list);
         
            foreach (var item in list) {
                project.SendInfoToLog(item);
            }
        }
    }

public static void GetIRow (string sql, ref IZennoList targetList) {
                ZennoPoster.Db.ExecuteQuery(sql, null, DbProvider.MySqlClient, connStr, ref targetList, sep_row);
            }
Вообщем вам правильно говорят. Создать список из кода нельзя, нужно предварительно создать этот List 1 в программе.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Благодарю за ответ!
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 377
Баллы
113

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
программно можно
тут писал как заставить код копируемый в буфер из кубика заставить работать с программно созданным списком
https://zennolab.com/discussion/threads/c-kod-dlja-raboty-s-mysql-v-zp-kto-mozhet-skopirovat-iz-svezhej-versii-zp.48524/#post-362077
так вы же его там не создаёте вроде
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: amyboose

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 377
Баллы
113
так вы же его там не создаёте вроде
да, не на то ссылку дал

в общем это можно реализовать самостоятельно в своем классе

Например, так

Код:
public class DB
{
    private string hostname;
    private string username;
    private string password;
    private string database;
    private string charset;

    public DB(string db_hostname, string db_username, string db_password, string db_database, string db_charset="utf8"){
        hostname = db_hostname;
        username = db_username;
        password = db_password;
        database = db_database;
        charset = db_charset;
    }

    public List<string> getAll(string query, string fieldSeparator="|", string rowSeparator="\n"){
       
        var result = new List<string>();

        string res = ZennoPoster.Db.ExecuteQuery(query, null, ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.MySqlClient, "server="+hostname+";user id="+username+";password="+password+";database="+database+";characterset="+charset, fieldSeparator,rowSeparator);
        if ( res != "" ){
            var w = res.Split(new string[]{rowSeparator},StringSplitOptions.None).ToList();               
            for(int i=0; i<w.Count; i++)
            result.Add(w[i]);
        }
       
        return result;           
    }
   
}
класс нужно поместить в общий код

в кубике c# юзать так:

Код:
DB db = new DB("localhost","root","","mydatabase");
var mylist = db.getAll("SELECT * FROM mytable WHERE status=1");
собственно mylist и есть наш программно создаваемый список
 

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