这一块的任务是对当前页面显示的表进行过滤,还是对前面所说的dojo窗体中实现。过滤条件先实现的最基本的就是将当前表的列名指定一下常量或变量,我这里实现的是常量的设置,变量就是我们这里的关联设置要求,由xs来做,我要得的只是t关联后的结果就行了。

过滤时要考滤通过选择下拉列表而得到的表进行过滤和通过自己输入sql语句进行过滤。第一种情况比较好解决,因为通过指定下拉列表中的列,再指定下拉列表中的字段,就可以显示当前表了。

需要传递的参数:加过滤条件时,由于要求就是对当前表的字段进行过滤,所以要取得当前表的表名,这个比较好实现,因为在当前显示的表的标题栏中有一个span的id就是记录当前表的表名的;当前库的类型,当前库名在先前的设置中都已经记录下来,可以直接用,还需要的参数就是当前的列名,选择的作为过滤条件的列,还有的就是常量值作为参数.

1.根据要求,首先要把当作过滤条件的列名放在下拉列表中,由于设置了选择和输入两种sql查询,所以设置的情况也不同.当用tab1中的选择形式查询表时,当前表的列名,可以在columns_name中直接获取到.

在dialog.js中,当获取当前表后,再添加如下代码,这样在tab3中的下拉列表中就有了作为过滤条件的列了.

     var  filtercol = document.getElementById("filtercol");
     var arraystr =  document.getElementById("hiddencol").value.split(",");
     filtercol.options.length   =   0;
      for ( i = 0 ; i < arraystr.length-1 ; i ++ )
          {
            filtercol.add(new Option(arraystr[i],arraystr[i]));   
        }

当用tab2中的输入sql语句形式选择表时,当前的表的列名,是记录在一个hidden标签中,放在返回表形式的字符串中,是在写的java类SQLset.java中添加的.

    StringBuffer hide = new StringBuffer();

  hide.append("<input type=\"hidden\" id=sql_hide name=");
     for (int i = 1; i <= numberOfColumns; i++)
     {  
      hide.append(rsmd.getColumnName(i) + ",");
      tdate.append((new StringBuilder("<th>")).append(rsmd.getColumnName(i)).append("</th>").toString());
     }
     hide.append(" >");    
     tdate.append("</tr>");
     tdate.append(hide);

这样hidden的name中就记录了用sql输入形式时当前表的列名.在sqltest.js中,当获取当前表后,再添加如下代码,这样在tab3中的下拉列表中就有了作为过滤条件的列了.

     var  filtercol = document.getElementById("filtercol");
     var arraystr =  document.getElementById("sql_hide").name.split(",") ;
       filtercol.options.length   =   0;
       for ( i = 0 ; i < arraystr.length -1 ; i ++ )
       {
         filtercol.add(new Option(arraystr[i],arraystr[i]));    
       }

2.下面就是输入一个常量,对选择的下拉列表中的某列进行过滤了.

遇到的问题是:当前表的列名的参数传递.因为在当前表的基础上进行下一步的过滤,但不知这个当前表是通过哪种方式生成的,所以获取的列名的方式也就不同了(前面已经说到的当前列的保存).解决的办法就是判断当前表中到底有没有一个hidden控件,方法就是看有没有它的id存在if(document.getElementById("sql_hide")),如果存在一个这样的id则当前表的生成是通过sql输入的形式显示的,则列的参数可以通过hidden的name值获取.如果不存在则列的参数由隐藏的hiddencol记录下来.

 var columns = "";
 if (cols)
 {
   columns = cols.name
 }
 else
 {
  columns = document.getElementById("hiddencol").value; 

}

3.按确定后即可根据过滤条件的设置更新当前表。

写好的java类如下(核心部分)

public String filtertable(String databasestyle,String databasename,String table,String columns,String column,String cons)
 {     
         String tdatevalue="";
            columns = columns.substring(0, columns.length() - 1);
         
        if(databasestyle.equals("SQLServer2000"))
                  
       { 
         setDatabaseName(databasename);
    try
    {   
     Connection conn = dblink_sql();    
        Statement stmt = conn.createStatement();   
        String sql = (new StringBuffer("select " + columns + " from ").append(table).append("  where ").append(column).append(" = ").append(cons).append(";")).toString();         
     rs = stmt.executeQuery(sql);     
     ResultSetMetaData rsmd = rs.getMetaData();
     int numberOfColumns = rsmd.getColumnCount();
     StringBuffer tdate = new StringBuffer();
     tdate.append("\n<table border=\"1\" algin=\"center\">");
     tdate.append("<tr>");
     
     for (int i = 1; i <= numberOfColumns; i++)
     {         
      tdate.append((new StringBuilder("<th>")).append(rsmd.getColumnName(i)).append("</th>").toString());
     }     
      //tdate.append("<th>"+ rsmd.getColumnName(i)+"</th>" );
     
     tdate.append("</tr>");
     
     for (; rs.next(); tdate.append("</tr>"))
     {
      tdate.append("<tr>");
      for (int i = 1; i <= numberOfColumns; i++)
      {                                    
       String colname = rsmd.getColumnName(i);
       tdate.append((new StringBuilder("<td >")).append(rs.getString(i)).append("</td>").toString());
       //tdate.append("<td>"+ rs.getString(i)+ "</td>");

      }  
     } 
     tdate.append("</Table>");
     tdatevalue = tdate.toString();
    }
    catch (Exception e)
    {
     System.out.println(e);
     return "Error";
     //return e.toString();
    }
    return tdatevalue;
   }

    else{
               setDatabaseName(databasename);
   try
   {
           Statement stmt = dblink_mysql().createStatement();
           String sql = (new StringBuffer("select * from ").append(table).append("  where ").append(column).append(" = ").append(cons).append(";")).toString();
    rs = stmt.executeQuery(sql);
    ResultSetMetaData rsmd = rs.getMetaData();
    int numberOfColumns = rsmd.getColumnCount();
    StringBuffer tdate = new StringBuffer();
    tdate.append("\n<table border=1 algin=\"center\">");
    tdate.append("<tr>");
    for (int i = 1; i <= numberOfColumns; i++)
     tdate.append((new StringBuilder("<th>")).append(rsmd.getColumnName(i)).append("</th>").toString());
    tdate.append("</tr>");
    for (; rs.next(); tdate.append("</tr>"))
    {
     tdate.append("<tr>");
     for (int i = 1; i <= numberOfColumns; i++)
     {                                     
      String colname = rsmd.getColumnName(i);
      tdate.append((new StringBuilder("<td >")).append(rs.getString(i)).append("</td>").toString());
     }
 
    }
    tdate.append("</Table>");
    tdatevalue = tdate.toString();
   }
   catch (Exception e)
   { 
    return "Error";
    //System.out.println(e);
   } 
   return tdatevalue;
    }    
}