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);
}
});
我有一个工作的 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);
}
});