DHTMLX 动态填充组合

DHTMLX Dynamically populate combo

我有一个工作的 DHTMLX 网格,它有许多包含组合框的列。 在前面的组合框中进行选择后,其中一些组合框需要动态填充数据。

例如

如果用户在项目组合框中选择项目 1234,则作业组合框应仅显示属于项目 1234 的作业的结果。

有人告诉我使用以下功能和方法,但无法弄清楚如何正确应用它们。

主APPJavascript代码:

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 代码

$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.clearAll(); - 即使在代码运行后,该代码似乎也没有做任何事情,JoineryItems 组合框仍然包含值。

JoineryItems.load(...); - 使用浏览器检查器,我可以看到结果以 XML 格式显示,但值不正确,而不是值和标签相同,标签正确显示,值作为奇数字符串显示我无法确定它们来自哪里的数字。

只要将 onEditCell 事件附加到网格,我的单元格值的更新不会在页面刷新后发生。例如。如果用户将工作日期从 3 月 2 日更改为 3 月 3 日,则单元格显示 3 月 2 日,直到页面刷新,此时它显示 3 月 3 日,如果在页面刷新之前进行了多次更改仅进行最后一次更改。

您的 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);
    }
});

附加 if 条件将阻止在编辑项目列以外的任何其他单元格时清除作业组合。 INDEX_OF_PROJECT_COLUMN 将是您拥有项目组合的列的索引值。此外,我还删除了额外的 js 变量 ProjectID,因为在给定的代码中没有必要创建它,但这取决于您。 我也不知道 PHP 但只要返回的数据是组合支持的,它就可以正常工作。您可以检查 this link 以了解支持的数据类型。希望对您有所帮助。

这是由以下人员完成的:

使用任何可用方法将列定义为组合。

获取组合列

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 中,您将自定义变量用作 select 语句的一部分,并且 returns 值集作为组合框选项

如果你想根据项目加载作业,你应该像下面这样使用

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);
}
});