none
【SharePoint】 jq 如何实现数据表的构建 RRS feed

  • 问题

  • 如上图所示,左面的yes,no , not available ,unknown是字段的值。 Celebrex,DLA ,Flector,Geno,Lyrica等是数据库列名。这里要注意的是此列名也是另一个表的值。其中的数字是该列中存有左边对应值的个数。

    数据库设计  表名为 【ProductClass】 字段【Product】 其中字段值为Celebrex,DLA ,Flector,Geno,Lyrica

    还有一个表名为【Products】 字段有Celebrex,DLA ,Flector,Geno,Lyrica 其中字段里的值为yes,no , not available ,unknown其中之一 如:

        Celebrex          DLA           Flector          Geno              Lyrica

     1     yes                no             yes         not available          no

     2 not available      yes           unknown        no                   no

     3     no              unknown       yes             yes                 yes

    现在我想根据其中的数据利用jq组织上面的表,请问应该如何来实现呢?当然利用sql的group by  可以解决此问题。但由于sharepoint不能直接利用sql语句操作数据库。再者是不能每次利用for循环根据传入的列名动态查询,如果数据量大的话会拖垮数据库,所以应该一次性把数据查询出来,再做刷选。我想请教高手提供我一下解决思路,用jq实现上图所示功能。谢谢!


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com


    2012年8月31日 13:43

答案

  • 如上图所示,左面的yes,no , not available ,unknown是字段的值。 Celebrex,DLA ,Flector,Geno,Lyrica等是数据库列名。这里要注意的是此列名也是另一个表的值。其中的数字是该列中存有左边对应值的个数。

    数据库设计  表名为 【ProductClass】 字段【Product】 其中字段值为Celebrex,DLA ,Flector,Geno,Lyrica

    还有一个表名为【Products】 字段有Celebrex,DLA ,Flector,Geno,Lyrica 其中字段里的值为yes,no , not available ,unknown其中之一 如:

        Celebrex          DLA           Flector          Geno              Lyrica

     1     yes                no             yes         not available          no

     2 not available      yes           unknown        no                   no

     3     no              unknown       yes             yes                 yes

    现在我想根据其中的数据利用jq组织上面的表,请问应该如何来实现呢?当然利用sql的group by  可以解决此问题。但由于sharepoint不能直接利用sql语句操作数据库。再者是不能每次利用for循环根据传入的列名动态查询,如果数据量大的话会拖垮数据库,所以应该一次性把数据查询出来,再做刷选。我想请教高手提供我一下解决思路,用jq实现上图所示功能。谢谢!


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com


    搞定了!

    function BandClass()
    {
     var carry=[];
     var rows = getCommonListData(null,null,"Product Class");
     if(rows != null && rows.length > 0)
     {
      
      var ddlclass= $("#ddlclass");
      ddlclass.append("<option value=''>Overall</option>");
      for(var i=0;i<rows.length;i++)
      { 
      
       carry.push(rows[i].getAttribute('ows_Class'));
      }
      
      for(var j=0;j<carry.length;j++)
      {
       if(carry[j]!=carry[j+1])
       {
            var option = "<option value='"+carry[j]+"'>"+carry[j]+"</option>";
            ddlclass.append(option);
       }
      }
      
      
     }

    }

     


    function BandtbActual()
    {
      var cols = getCommonListData(null,null,"Product Class");
      var rowXml =getCommonListData(null,null,"Products"); //<Query><Where><Eq><FieldRef Name='Celebrex' /><Value Type='Text'>yes</Value> </Eq></Where></Query>
      //动态构造列名
      var trHeader="<tr style='height:20px;width:100%'><td style='width:200px;'>&nbsp;</td>";
      if(cols!= null && cols.length > 0)
      {
       for(var i=0;i<cols.length;i++)
       {
        colname=cols[i].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
        trHeader+="<td style='text-align:center;' >&nbsp;"+colname+"&nbsp;</td>";
       }
      }
      trHeader+="<td>&nbsp;Overall&nbsp;</td></tr>"; 
      $("#tbActual").append(trHeader);
      /*//根据行便利每列的数据
       if(cols!= null && cols.length > 0)
       {
        
            for(var j=0;j<rowXml.length;j++)
          {
           var yes=0,no=0,available=0,tbd=0; //定义四个变量
           for(var i=0;i<cols.length;i++)
           {
            colname=cols[i].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
            var rowvalue=rowXml[j].getAttribute('ows_'+colname); //获取该行中的列值 
           if(rowvalue=='yes')
              yes++;
             else if(rowvalue=='no')
              no++;
             else if(rowvalue=="available")
              available++;
             else
               tbd++;
      alert(colname+"的列yes:"+yes+"no:"+no+"available:"+available+"tbd:"+tbd);
           }
           
        
          }
        
        
        }*/
        //根据列遍历每行数据
        if(cols!= null && cols.length > 0)
        { 
        var valist=['yes','no','available','tbd'];
        for(var k=0;k<valist.length;k++) //循环4行
        {
         var HtmlTr="<tr>";
         var HtmlTd="";
         var totcount=0;//累加器
         for(var col=0;col<cols.length;col++) //列
         {
          colname=cols[col].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
          HtmlTd+="<td class="+colname+valist[k]+" style='text-align:center;height:20px;'>";
          var count=0;//累加值
          
          for(var j=0;j<rowXml.length;j++) //行
           {
            var rowvalue=rowXml[j].getAttribute('ows_'+colname); //获取该列中在rowXml中每行的值
            if(rowvalue==valist[k])
            {
             count++;
            }       
           }
           totcount+=count;
           HtmlTd+=count+"</td>";
         }
         
         
         //进行一下数据转换
         var vdata="";
         if(valist[k]=="available")
          vdata="Not Available";
         else if(valist[k]=="tbd")
          vdata="Unknown";
         else vdata=valist[k];
         
         
         HtmlTr+="<td style='width:300px;font-size:12px;color:#077FCE;font-weight:bold;'>"+vdata+"</td>"+HtmlTd+"<td style='text-align:center;' class='totcount"+valist[k]+"' >"+totcount+"</td></tr>";
         //alert("totcount"+valist[k]);
         $("#tbActual").append(HtmlTr);
        }
        }
        //加载百分比
        var HtmlTrend="<tr>";
        var HtmlTdend="";
        for(var col=0;col<cols.length;col++)
        {
         colname=cols[col].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
         var rate=(parseInt($("."+colname+"yes").html())/(parseInt($("."+colname+"yes").html())+parseInt($("."+colname+"no").html()))).toFixed(2)*100+"%";
         HtmlTdend+="<td style='text-align:center;height:20px;'>"+rate+"</td>";
        }

       
        //构造总的百分比
        totrate=(parseInt($(".totcountyes").html())/(parseInt($(".totcountyes").html())+parseInt($(".totcountno").html()))).toFixed(2)*100+"%";
       
        HtmlTrend+="<td style='width:300px;font-size:12px;color:#077FCE;font-weight:bold;'>Adoption Rate</td>"+HtmlTdend+"<td style='text-align:center;'>"+totrate+"</td></tr>";
        $("#tbActual").append(HtmlTrend);
     
    }


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com

    2012年9月4日 2:26

全部回复

  • 如上图所示,左面的yes,no , not available ,unknown是字段的值。 Celebrex,DLA ,Flector,Geno,Lyrica等是数据库列名。这里要注意的是此列名也是另一个表的值。其中的数字是该列中存有左边对应值的个数。

    数据库设计  表名为 【ProductClass】 字段【Product】 其中字段值为Celebrex,DLA ,Flector,Geno,Lyrica

    还有一个表名为【Products】 字段有Celebrex,DLA ,Flector,Geno,Lyrica 其中字段里的值为yes,no , not available ,unknown其中之一 如:

        Celebrex          DLA           Flector          Geno              Lyrica

     1     yes                no             yes         not available          no

     2 not available      yes           unknown        no                   no

     3     no              unknown       yes             yes                 yes

    现在我想根据其中的数据利用jq组织上面的表,请问应该如何来实现呢?当然利用sql的group by  可以解决此问题。但由于sharepoint不能直接利用sql语句操作数据库。再者是不能每次利用for循环根据传入的列名动态查询,如果数据量大的话会拖垮数据库,所以应该一次性把数据查询出来,再做刷选。我想请教高手提供我一下解决思路,用jq实现上图所示功能。谢谢!


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com


    搞定了!

    function BandClass()
    {
     var carry=[];
     var rows = getCommonListData(null,null,"Product Class");
     if(rows != null && rows.length > 0)
     {
      
      var ddlclass= $("#ddlclass");
      ddlclass.append("<option value=''>Overall</option>");
      for(var i=0;i<rows.length;i++)
      { 
      
       carry.push(rows[i].getAttribute('ows_Class'));
      }
      
      for(var j=0;j<carry.length;j++)
      {
       if(carry[j]!=carry[j+1])
       {
            var option = "<option value='"+carry[j]+"'>"+carry[j]+"</option>";
            ddlclass.append(option);
       }
      }
      
      
     }

    }

     


    function BandtbActual()
    {
      var cols = getCommonListData(null,null,"Product Class");
      var rowXml =getCommonListData(null,null,"Products"); //<Query><Where><Eq><FieldRef Name='Celebrex' /><Value Type='Text'>yes</Value> </Eq></Where></Query>
      //动态构造列名
      var trHeader="<tr style='height:20px;width:100%'><td style='width:200px;'>&nbsp;</td>";
      if(cols!= null && cols.length > 0)
      {
       for(var i=0;i<cols.length;i++)
       {
        colname=cols[i].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
        trHeader+="<td style='text-align:center;' >&nbsp;"+colname+"&nbsp;</td>";
       }
      }
      trHeader+="<td>&nbsp;Overall&nbsp;</td></tr>"; 
      $("#tbActual").append(trHeader);
      /*//根据行便利每列的数据
       if(cols!= null && cols.length > 0)
       {
        
            for(var j=0;j<rowXml.length;j++)
          {
           var yes=0,no=0,available=0,tbd=0; //定义四个变量
           for(var i=0;i<cols.length;i++)
           {
            colname=cols[i].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
            var rowvalue=rowXml[j].getAttribute('ows_'+colname); //获取该行中的列值 
           if(rowvalue=='yes')
              yes++;
             else if(rowvalue=='no')
              no++;
             else if(rowvalue=="available")
              available++;
             else
               tbd++;
      alert(colname+"的列yes:"+yes+"no:"+no+"available:"+available+"tbd:"+tbd);
           }
           
        
          }
        
        
        }*/
        //根据列遍历每行数据
        if(cols!= null && cols.length > 0)
        { 
        var valist=['yes','no','available','tbd'];
        for(var k=0;k<valist.length;k++) //循环4行
        {
         var HtmlTr="<tr>";
         var HtmlTd="";
         var totcount=0;//累加器
         for(var col=0;col<cols.length;col++) //列
         {
          colname=cols[col].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
          HtmlTd+="<td class="+colname+valist[k]+" style='text-align:center;height:20px;'>";
          var count=0;//累加值
          
          for(var j=0;j<rowXml.length;j++) //行
           {
            var rowvalue=rowXml[j].getAttribute('ows_'+colname); //获取该列中在rowXml中每行的值
            if(rowvalue==valist[k])
            {
             count++;
            }       
           }
           totcount+=count;
           HtmlTd+=count+"</td>";
         }
         
         
         //进行一下数据转换
         var vdata="";
         if(valist[k]=="available")
          vdata="Not Available";
         else if(valist[k]=="tbd")
          vdata="Unknown";
         else vdata=valist[k];
         
         
         HtmlTr+="<td style='width:300px;font-size:12px;color:#077FCE;font-weight:bold;'>"+vdata+"</td>"+HtmlTd+"<td style='text-align:center;' class='totcount"+valist[k]+"' >"+totcount+"</td></tr>";
         //alert("totcount"+valist[k]);
         $("#tbActual").append(HtmlTr);
        }
        }
        //加载百分比
        var HtmlTrend="<tr>";
        var HtmlTdend="";
        for(var col=0;col<cols.length;col++)
        {
         colname=cols[col].getAttribute('ows_Product').replace(" ","").replace("-",""); //查询出列的名字
         var rate=(parseInt($("."+colname+"yes").html())/(parseInt($("."+colname+"yes").html())+parseInt($("."+colname+"no").html()))).toFixed(2)*100+"%";
         HtmlTdend+="<td style='text-align:center;height:20px;'>"+rate+"</td>";
        }

       
        //构造总的百分比
        totrate=(parseInt($(".totcountyes").html())/(parseInt($(".totcountyes").html())+parseInt($(".totcountno").html()))).toFixed(2)*100+"%";
       
        HtmlTrend+="<td style='width:300px;font-size:12px;color:#077FCE;font-weight:bold;'>Adoption Rate</td>"+HtmlTdend+"<td style='text-align:center;'>"+totrate+"</td></tr>";
        $("#tbActual").append(HtmlTrend);
     
    }


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com

    2012年9月4日 2:26
  • 很不错!

    如果有帮助,标记为答复!Mark as Answer if answered!

    2012年9月4日 3:16
    版主
  • 很不错!

    如果有帮助,标记为答复!Mark as Answer if answered!


    谢谢!也是经过了仔细思考才想出来的解决方法!

    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com

    2012年9月4日 14:27