Таблица не обновляется

Страницы: 1
RSS
Таблица не обновляется
 
скрипт у меня находится в папке c!Quik!scripts
Из "Руководство пользователя Интерпретатора языка Lua" взял методом copy&paste 2 файла:  quik_table_wrapper.lua и ntime.lua.
Файл table_object.lua обрезал до  https://pastebin.com/TrMfSzrH
Запуск и ...  таблица пустая а вот этот код(в ссылке строки 43-53) выдает 2 и 4 а должен 1 и 3
  1. row = t:AddLine()
  2. if SetCell(t.t_id, row, 0, "time") == true  then
  3.    message("1")
  4. else
  5.    message("2")
  6. end
  7. if t:SetValue(row,"ai","ai") == true then
  8.    message("3")
  9. else
  10.    message("4")
  11. end
SetCell():
Функция возвращает «true» в случае успешного завершения, иначе – «false».
 
Забыл квик 7.27.2.1
 
оригинальный table_object.lua - кстати работает и все показывает
 
Здравствуйте, dimka.

Причина, по которой Вы получаете не тот результат, который ожидаете состоит в следующем.
В первом условии
Код
if SetCell(t.t_id, row, 0, "time") == true  then …

Вы пытаетесь задать значение для ячейки второй строки, нулевого столбца, а такого нет, нумерация начинается с единицы. Поэтому значение не устанавливается, возвращается "false" и выдаётся сообщение "2".
Во втором условии:
Код
if t:SetValue(row,"ai","ai") == true then …

Проявляется особенность реализации функции SetValue(), представленная в файле quik_table_wrapper.lua – не для всех условий функции был предусмотрен возврат результата. Чтобы функция начала работать так, как Вы того, вероятно, ожидаете – можно её модифицировать следующим образом:
Код
function QTable:SetValue(row, col_name, data)
   local col_ind = self.columns[col_name].id or nil
   if col_ind == nil then
      return false
   end
   -- если для столбца задана функция форматирования, то она используется
   local ff = self.columns[col_name].format_function
   
   if type(ff) == "function" then
      -- в качестве строкового представления используется
      -- результат выполнения функции форматирования
      SetCell(self.t_id, row, col_ind, ff(data), data)
      return true
   else
      SetCell(self.t_id, row, col_ind, tostring(data), data)
      return true // эту строчку добавили
   end
end
 
SetCell(t.t_id, row, 1, "time") <- спасибо заработало(я забыл  что с 1 надо было начинать)
НО
t:SetValue(row,"time","ai") <-  Не работает то есть в таблице ничего не показывает.
Такое чувство что t:SetValue() не работает QTABLE_STRING_TYPE, потому что числа(QTABLE_DOUBLE_TYPE) выводятся
 
Здравствуйте,
Согласно документации:
Цитата
Для столбцов со строковыми типами данных параметр «value» не задается.
А он у Вас указан в функции QTable:SetValue

Следует понимать что пример приведенный в документации является именно примером одной из возможных реализаций функций.
никто Вас не принуждает слепо использовать именно его, так как это пример, не более.
Если Вам нужно вставлять строковые данные, тогда перепишите пример под свои нужды так чтобы для строковых данных, в SetCell параметр «value» не задавался.
Либо напишите свои функции.
либо не пишите и используйте те что в документации, а не в примерах.
на Ваш выбор.
 
Вроде решил проблему ...
В документации:
SetCell(String, Integer,  Integer, String) - запись значения в таблицу по указанным номерам столбца и строки
4 аргумента передаются
Идем в Файл quik_table_wrapper.lua:
смотрим
Код
-- Установить значение в ячейке
function QTable:SetValue(row, col_name, data)
local col_ind = self.columns[col_name].id or nil
if col_ind == nil then
return false
end
-- если для столбца задана функция форматирования, то она используется
local ff = self.columns[col_name].format_function

if type(ff) == "function" then
-- в качестве строкового представления используется
-- результат выполнения функции форматирования
SetCell(self.t_id, row, col_ind, ff(data), data)_____________________<опа 5! аргументов, а не 4
return true
else
SetCell(self.t_id, row, col_ind, tostring(data), data)_____________________<опа 5! аргументов, а не 4
end
end

Сделал SetCell(self.t_id, row, col_ind, tostring(data)) глюк исчез
 
Ну и для полноты wrapper`a нужно добавить:
Код
-- Закрасить ячейку по номеру строки и имени столбца
function QTable:SetColor(row, name, b_color, f_color, sel_b_color, sel_f_color)
local t={}
local col_ind = self.columns[name].id
if col_ind == nil then
return nil
end
t = SetColor(self.t_id, row, col_ind, b_color, f_color, sel_b_color, sel_f_color)
return t
end
-- Функция для подсветки выбранного диапазона ячеек цветом фона
-- и цветом текста в течении указанного времени с плавным «затуханием»
function QTable:Highlight(row, name, b_color, f_color, timeout)
local t={}
local col_ind = self.columns[name].id
if col_ind == nil then
return nil
end
t = Highlight(self.t_id, row, col_ind, b_color, f_color, timeout)
return t
end
Страницы: 1
Читают тему
Наверх