2016-03-16 5 views
1

У меня есть рабочая сетка DHTMLX, которая содержит несколько столбцов, содержащих Combo Boxes. Немногие из этих комбинированных блоков должны быть динамически заполнены данными после выбора в предыдущих комбинированных блоках.DHTMLX Динамическое заполнение комбо

Например.

Если пользователь выбирает проект 1234 в Combo Box Project поле Работа Combo должен отображать только результаты работ, относящиеся к Project 1234.

Мне сказали, чтобы использовать следующие функции и методы, но не могут работать как правильно их применять.

код Главная APP Javascript:

JoineryItems = timesheetGrid.getColumnCombo(6); 

timesheetGrid.attachEvent("onEditCell",function(stage,rId,cInd,nValue,oValue){ 
       if(cInd == 4 && stage == 2) { 
        JoineryItems.clearAll(); 
        JoineryItems.load("data/combo/JoineryItems.php?Project="+nValue); 
       } 
       else {}   
      }); 

Со следующим PHP код на стороне сервера Combo Разъем

$Project = $_GET[Project]; 
include_once '../../includes/db_connect.php'; 
include_once '../../includes/functions.php'; 
require_once("../../codebase/connector/combo_connector.php"); 

$data = new ComboConnector($res, "MySQL"); 
$data->render_sql("SELECT jmpJobID as value, jmpJobID as label from Inf_Jobs where jmpClosed = 0 AND jmpProjectID = $Project", 
    "jmpJobID", 
    "jmpJobID(value),jmpJobID(label)" 
    ); 
?> 

В настоящее время я не могу получить следующие правильно функционировать:

JoineryItems. очистить все(); - Этот код, похоже, вообще ничего не делает даже после того, как код запускает COM-модуль JoineryItems, который все еще содержит значения.

JoineryItems.load (...); - Используя инспектор браузера, я вижу, что результаты идут в формате XML, но значение является неправильным, а не значением, а метка идентична метке, проходящей правильно, и значение проходит через нечетную строку чисел, которую я не могу определить, откуда они.

Всякий раз, когда событие onEditCell привязано к сетке, обновление значений моей ячейки происходит только после обновления страницы. НАПРИМЕР. если пользователь меняет дату работы со 2 марта по 3 марта, ячейка отображает 2 марта, пока страница не будет обновлена, после чего она отобразит 3-й марш и если перед обновлением страницы будет сделано несколько изменений, сделано только последнее изменение.

ответ

0

Это делается следующим образом:

Определение столбца как комбо, используя любой из доступных способов.

Получить Колонном COMBO

MyCombo = MyGrid.getColumnCombo(ColumnIndex); 

Загрузите пользовательские

timesheetGrid.attachEvent("onCellChanged",function(rId,cInd,nValue){ 
      if (cInd == 0) { 
       MyCombo.clearAll(); 
       MyCombo.load("data/combo/MyCombo.php?CustomGetVariable="+nValue); 
      } 

Тогда в PHP вы используете пользовательскую переменную как часть вашего выбора даного и возвращает набор значений опций поле со списком

0

Ваш код JavaScript выглядит нормально с одним недостающим условием:

timesheetGrid.attachEvent("onEditCell",function(stage,rId,cInd,nValue,oValue){ 
    if(cInd == INDEX_OF_PROJECT_COLUMN){ 
     JoineryItems.clearAll(); 
     JoineryItems.load("data/combo/JoineryItems.php?Project="+nValue); 
    } 
}); 

Дополнительно, если условие будет препятствовать очистное комбо работу при редактировании любой другой клетки, но проекта колонке. INDEX_OF_PROJECT_COLUMN будет значением индекса столбца, в котором у вас есть комманда проекта. Кроме того, я удалил дополнительную переменную jds переменной ProjectID, как в приведенном коде, нет необходимости ее создавать, но это зависит от вас. Кроме того, я не знаю PHP, но до тех пор, пока возвращаемые данные будут поддерживаться комбо, тогда он будет работать нормально. Вы можете проверить this link на тип поддерживаемых данных. Надеюсь, эта помощь.

+0

Если я использую мой инспектор браузера, я вижу, что результаты выбираются из базы данных, но они не заполняют поле со списком. Я также получаю некоторый странный результат в том, что столбец значений моих результатов не тот, который я выбрал из таблицы. Также значения, которые я добавляю или изменяю в ячейке проекта, больше не остаются до обновления страницы. тем не менее, он запускается только в колонке проекта, что является отличным началом. –

0

Если вы хотите загрузить вакансии, связанные с проектом, вы должны использовать, как показано ниже:

timesheetGrid.attachEvent("onEditCell",function(stage,rId,cInd,nValue,oValue){ 
    if(cInd == 4 && stage == 2) 
    { 
      var combo2 =timesheetGrid.cells(rId,5).getCellCombo(); 
            JoineryItems.clearAll(); 
        JoineryItems.load("data/combo/JoineryItems.php?Project="+nValue); 
} 
});