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

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

Спасибо!
 
он наверно имеет в виду создание List 1, а не передача List 1 в переменную list

List 1 - у Вас должен быть уже создан через ПМ - визуально.
во всяком случае в справке нет описания создания через код
 
Последнее редактирование:
  • Оценить
Реакции: VladZen
По идее должен был создаваться как-то так project.Lists.Add("list1"), но такого метода нет. Думаю, что внутри зенки он есть, переопределённый и приватный.
 
Что-то я не очень понял...
Объект 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);
            }
 
С IZennoTable та же история.
 
Итак детальней.

Выдает ошибку - "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 в программе.
 
Благодарю за ответ!
 
так вы же его там не создаёте вроде
да, не на то ссылку дал

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

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

Код:
Развернуть Свернуть Копировать
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 и есть наш программно создаваемый список
 

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