账号通
    

账号  

密码  

3275

查看

6

回复
主题:自定义SQL标签实现多行多列功能 [收藏主题] 转到:  
青大侠 当前离线

90

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:1111 分
登录次数:61 次
注册时间:2007/11/23
最后登录:2011/5/29
青大侠 发表于:2008/9/23 15:24:00   | 只看该作者 查看该作者主题 楼主 
做在线知识付费 选科汛云开店

自定义SQL标签实现单行或单列非常方便,但是对于多行多例发现比较难实行,应用中经常用到.


通过修改kesion.Label.sqlcls.asp文件实现,主要修改二个地方;


(1)\'返回循环次数
  Function GetLoopNum(Content)
    Dim regEx, Matches, Match
    Set regEx = New RegExp
    '以下www.q311.cn添加的...2008-9-22
    regEx.Pattern="\[looprow=\d*]"
    regEx.IgnoreCase = True
    regEx.Global = True
    Set Matches = regEx.Execute(Content)
    If Matches.count > 0 Then
     GetLoopNum=Replace(Replace(Matches.item(0),"[looprow=",""),"]","")
     exit function
    Else
     GetLoopNum=0
    end if   
    'end 取得行数
    regEx.Pattern="\[loop=\d*]"
    regEx.IgnoreCase = True
    regEx.Global = True
    Set Matches = regEx.Execute(Content)
    If Matches.count > 0 Then
     GetLoopNum=Replace(Replace(Matches.item(0),"[loop=",""),"]","")
     exit function 'www.q311.cn
    Else
     GetLoopNum=0
    end if
   
  End Function


(2)Function ReplaceDIYFunctionLabel(SqlLabel,GetFrom):


从Else
     Do While Not KS_RS_Obj.Eof
      For Each Match In Matches
        LoopTimes=GetLoopNum(Match.Value)   '循环次数
        CirLabelContent = Replace(Replace(Match.value,"[loop=" & LoopTimes&"]",""),"[/loop]","")
        LabelContent    = Replace(LabelContent,"[loop="&LoopTimes&"]"&CirLabelContent&"[/loop]",GetCirLabelContent(CirLabelContent,KS_RS_Obj,LoopTimes),1,1)
        If KS_RS_Obj.Eof Then Exit For
      Next
      If KS_RS_Obj.Eof Then
       Exit Do
      Else
      KS_RS_Obj.MoveNext
      End If
     Loop


用以下替换:Else
      ' begin 以上www.q311.cn/加上去
      dim Row,RowMatches,RowContent,RowLoopContent,LoopRows,M,isFound
      regEx.Pattern = "\[looprow=\d*].+?\[/looprow]"
      regEx.IgnoreCase = True
      regEx.Global = True
      isFound=regEx.Test(LabelContent) '测试有looprow行数定义
      if isFound then
       Set RowMatches = regEx.Execute(LabelContent)
       For Each Row in RowMatches
        LoopRows=GetLoopNum(Row.Value)   '循环次数,
        if loopRows>0 then
         RowLoopContent=Replace(Replace(row.value,"[looprow=" & LoopRows&"]",""),"[/looprow]","")
        else
         RowLoopContent=LabelContent
         LoopRows=1
        end if
       Next
      else
       RowLoopContent=LabelContent
       LoopRows=1
      end if  '取得循环体和行数
     Do While Not KS_RS_Obj.Eof
      for m=1 to loopRows
       regEx.Pattern = "\[loop=\d*].+?\[/loop]"
       regEx.IgnoreCase = True
       regEx.Global = True
       Set Matches = regEx.Execute(RowLoopContent)
       For Each Match In Matches
         LoopTimes=GetLoopNum(Match.Value)   '列数的循环次数,
         CirLabelContent = Replace(Replace(Match.value,"[loop=" & LoopTimes&"]",""),"[/loop]","")
         rowContent    = rowcontent&Replace(RowLoopContent,"[loop="&LoopTimes&"]"&CirLabelContent&"[/loop]",GetCirLabelContent(CirLabelContent,KS_RS_Obj,LoopTimes),1,1)
         If KS_RS_Obj.Eof Then Exit For
       Next
       If KS_RS_Obj.Eof Then
         Exit Do
       Else
        'KS_RS_Obj.MoveNext 由于多行时取消光标移动
       End If
      next
      if m>looprows then '当取得的数据超过行*列数时要退出,没有用,解决?
       exit do
      end if
     Loop
     '不同的替换方法
     if isFound then
      LabelContent    = Replace(LabelContent,"[looprow="&LoopRows&"]"&RowLoopContent&"[/looprow]",rowContent,1,1)
     else
      LabelContent=rowContent
     end if  'end changed OK 2008-9-22 wwww.q311.cn


3\自定义SQL标签书写注意方法


列数还是由原来的[loop=]定义,由于[loop=]...[/loop]组成列的循环体,行数由[looprow=num]定义,由[looprow=num]...[/looprow]组成循环体,一般的结构由[looprow=num]..[loop=num2]...[/loop]...[/looprow];如本网站首页的博客相片就是这样完成的;{SQL_首页博客相片(6,2,3)}



SQL语句:select top {$Param(0)} AddDate,PhotoUrl,Title,UserName,xcid from KS_Photozp


最好是三个参数,显示数量,行数,列数,并且显示数量=行数*列数;


4\调用SQL标签;就OK

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
kesioner 当前离线

74

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:777 分
登录次数:31 次
注册时间:2008/9/19
最后登录:2009/12/13
kesioner 发表于:2008/10/5 8:44:00   | 只看该作者 查看该作者主题 沙发 
科汛智能建站系统
这个很好,收藏了,谢谢楼主
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
xuefeng211 当前离线

7

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:239 分
登录次数:2 次
注册时间:2008/10/3
最后登录:2008/10/15
xuefeng211 发表于:2008/10/5 6:02:00   | 只看该作者 查看该作者主题 藤椅 
科汛在线商城系统(NET)

楼主  用以下替换:Else  这句该怎么理解   是用你改的只替换 Else

 

还是替换从  Else 到 KS_RS_Obj.MoveNext End If  Loop

 

还是保留 Else  替换 从  Do While Not KS_RS_Obj.Eof  到 KS_RS_Obj.MoveNextEnd If  Loop

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2008/9/23 16:33:00   | 只看该作者 查看该作者主题 板凳 

其实多列可以用div来控制啊.

 

div的float 属性设置为left就行了.

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
zhoujie 当前离线

6

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:257 分
登录次数:3 次
注册时间:2008/9/29
最后登录:2008/10/26
zhoujie 发表于:2008/10/2 17:16:00   | 只看该作者 查看该作者主题 报纸 
科汛在线考试系统(NET)
以下是引用一生有你在2008-9-23 16:33:00的发言:

其实多列可以用div来控制啊.

 

div的float 属性设置为left就行了.

举个例子说说啊。我很菜

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
青大侠 当前离线

90

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:1111 分
登录次数:61 次
注册时间:2007/11/23
最后登录:2011/5/29
青大侠 发表于:2008/10/6 18:51:00   | 只看该作者 查看该作者主题 地板 
科汛在线考试系统(NET)

针对此功能,本站提供修改的源文件下载.

下载地址:http://www.q311.cn/DownLoad/ShowInfo.asp?ID=23

可以与源文件对比.

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
51px 当前离线

92

主题

5

广播

0

粉丝
添加关注
级别:学前班

用户积分:772 分
登录次数:49 次
注册时间:2009/1/7
最后登录:2017/8/17
51px 发表于:2009/4/21 10:40:00   | 只看该作者 查看该作者主题 7楼 

我试过了,如果不分页就可以正常显示,但在分页标签里用不了.只能显示第一行

希望楼主继续完善一下.

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.16406秒 powered by KesionCMS 9.0