DHTMLX动态填充组合

时间:2016-03-16 21:23:50

标签: javascript php mysql combobox dhtmlx

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

例如

如果用户在项目组合框中选择项目1234,则“作业组合”框应仅显示属于“项目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代码

$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 个答案:

答案 0 :(得分:0)

您的JavaScript代码看起来很好,缺少一个条件:

import java.util.*;
import java.util.Scanner;
import java.io.*;


class Point
{
   /* Method to find the quadrant of both the points p and q*/

   public String quadrant(double xp, double yp, double xq, double yq){


        Scanner keyboard= new Scanner(System.in);
        System.out.print("Enter the first value for Xp: ");
        xp = keyboard.nextDouble();
        Scanner keyboard1 = new Scanner(System.in);
        System.out.print("Enter the first value for Yp: ");
        yp = keyboard.nextDouble();
        Scanner keyboard2= new Scanner(System.in);
        System.out.print("Enter the first value for Xq: ");
        xq = keyboard.nextDouble();
        Scanner keyboard3= new Scanner(System.in);
        System.out.print("Enter the first value for Yq: ");
        yq = keyboard.nextDouble();
       String p_quadrant=getQuadrant(xp,yp);
       String q_quadrant=getQuadrant(xq,yq);
       return "Point p is at "+p_quadrant+" and Point q is at "+q_quadrant;  
   }

   /* Method to get the quadrant of each passed point*/
   public String getQuadrant(double x, double y){
       if(x==0 && y==0){
           return "Origin";
       }
       else if(x==0){
           return "Y-axis";
       }
       else if(y==0){
           return "X-axis";
       }
       if (x >= 0) {
   return (y >= 0 ? "1st Quadrant":"4th Quadrant");
       } else {
return (y >= 0 ? "2nd Quadrant":"3rd Quadrant");
   }

   }
   /* Method to get the euclidean distance between p and q */
   public double euclidean(double xp, double yp, double xq, double yq){
   double euc_distance = 0.0;

   double x_square=Math.pow((xq-xp), 2);
   double y_square=Math.pow((yq-yp), 2);
   euc_distance= Math.sqrt(x_square+y_square);

   return euc_distance;
   }

   /* Method to calculate the slope */
   public double slope(double xp, double yp, double xq, double yq){

       double x_diff= xp-xq;
       double slope=0.0;

       /* Check applied to avoid a divide by zero error */
       if(x_diff == 0){
           System.out.println("Slope is undefined");
           System.exit(1);  
       }
       else{
           slope=(yp-yq)/x_diff;
       }
       return slope;  
   }


   public static void main (String[] args) throws java.lang.Exception
   {

   /* Creating an object of Points and calling each method individually and printing the value*/
   Points p = new Points();
   double euc=p.euclidean(2.3, 5.6,0.5,9);
   String quad=p.quadrant(0, -5.6,0,0);
   double slop=p.slope(0,0.5,0.6,9);
   System.out.print("Euclidean:"+euc+"\n Quadrant:"+quad+"\n Slope:"+slop);
   }
}

如果条件将阻止在编辑除项目列之外的任何其他单元格时清除作业组合,则添加。 INDEX_OF_PROJECT_COLUMN将是您具有项目组合的列的索引值。此外,我已经删除了额外的js变量ProjectID,因为代码中没有必要创建它,但它取决于你。 另外我不知道PHP,但只要返回的数据是combo支持的东西,它就可以正常工作。您可以检查this link支持的数据类型。希望这有帮助。

答案 1 :(得分:0)

这可以通过以下方式完成:

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

获取组合列

mapviewchangeend

加载自定义

MyCombo = MyGrid.getColumnCombo(ColumnIndex);

然后在php中,您将自定义变量用作选择参数的一部分,并将组值作为组合框选项返回

答案 2 :(得分: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);
}
});