Javascript DHTMLX动态填充组合

Javascript DHTMLX动态填充组合,javascript,php,mysql,combobox,dhtmlx,Javascript,Php,Mysql,Combobox,Dhtmlx,我有一个工作的DHTMLX网格,它有许多包含组合框的列。 在前面的组合框中进行选择后,其中一些组合框需要动态填充数据 例如 如果用户在“项目”组合框中选择1234项目,则“作业”组合框应仅显示属于项目1234的作业的结果 我被告知要使用以下函数和方法,但无法解决如何正确应用它们 主要应用程序Javascript代码: JoineryItems = timesheetGrid.getColumnCombo(6); timesheetGrid.attachEvent("onEditCell",fu

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

例如

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

我被告知要使用以下函数和方法,但无法解决如何正确应用它们

主要应用程序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代码

$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日。如果在页面刷新之前进行了多次更改,而不是只进行了最后一次更改,则单元格将显示3月2日。

您的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条件将阻止在编辑除项目列以外的任何其他单元格时清除作业组合。_PROJECT_列的INDEX_将是包含项目组合的列的索引值。此外,我还删除了额外的js变量ProjectID,因为在给定的代码中,没有必要创建它,但这取决于您。
我也不知道PHP,但只要返回的数据是combo支持的,它就可以正常工作。您可以检查支持的数据类型。希望有此帮助。

您的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条件将阻止在编辑除项目列以外的任何其他单元格时清除作业组合。_PROJECT_列的INDEX_将是包含项目组合的列的索引值。此外,我还删除了额外的js变量ProjectID,因为在给定的代码中,没有必要创建它,但这取决于您。
我也不知道PHP,但只要返回的数据是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中,将自定义变量用作select语句的一部分,它将返回一组值作为组合框选项,具体操作如下:

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

获取组合列

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语句的一部分,它将返回一组值作为组合框选项

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

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

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

如果我使用浏览器检查器,我可以看到结果是从数据库中选择的,但它们没有填充组合框。我也得到了一些奇怪的结果,因为我的结果的value列不是我从表中选择的。此外,我在项目单元格中添加或更改的值在页面刷新之前不再保持不变。但是,它只会在项目列上启动,这是一个很好的开始。如果我使用浏览器检查器,我可以看到结果是从数据库中选择的,但它们不会填充组合框。我也得到了一些奇怪的结果,因为我的结果的value列不是我从表中选择的。此外,我在项目单元格中添加或更改的值在页面刷新之前不再保持不变。不过,它只会在项目栏上启动,这是一个很好的开始。