blog.Toby

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評(píng)論 :: 0 Trackbacks
          <2013年7月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Securities

          文章

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          我最近在寫一個(gè)BBS的項(xiàng)目,在顯示主題列表時(shí),我遇到了一個(gè)問(wèn)題。  
             
            BBS_Topic的數(shù)據(jù)表結(jié)構(gòu)定義類似下面這樣:  
             
            TABLE   BBS_Topic  
            (  
            Title NVARCHAR(40),  
            Author NVARCHAR(20),  
            PostDate DATETIME   NOT   NULL   DEFAULT   GETDATE(),  
            Content NTEXT,  
            Clicked INT   NOT   NULL   DEFAULT   0,  
            ReCount INT   NOT   NULL   DEFAULT   0,  
            LastReplyer NVARCHAR(20)  
            )  
             
            下面是ListTopic.aspx文件中的部分內(nèi)容:  
             
            <asp:Repeater   ID="_TopicRepeater"   Runat="SERVER"   DataSource="...">  
            <ItemTemplate>  
            <%#   DataBinder.Eval(Container.DataItem,   "Title")   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "Author")   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "Clicked")   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "ReCount")   %>  
             
            <!--   注意下面的if語(yǔ)句   -->  
            <%   if((int)(DataBinder.Eval(Container.DataItem,   "ReCount"))==0){   %>  
            ----  
            <%   }   else   {   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "LastReplyer")   %>  
            <%   }   %>  
             
            </ItemTemplate>  
            </asp:Repeater>  
             
            使用if語(yǔ)句的目的,是在于:判斷當(dāng)前帖子的回復(fù)次數(shù)為0時(shí),就將LastReplyer這項(xiàng)顯示成“----”  
             
            而當(dāng)前的帖子的回復(fù)次數(shù)不為0時(shí),則顯示回復(fù)人的名字  
             
            但是,這樣的做法是行不通的。在IE中會(huì)出現(xiàn)類似的警告“沒有引用Container,使用using引用...”  
             
            至于為什么這樣?可能是因?yàn)镈ataBinder.Eval和Container.DataItem同屬Repeater類的成員的緣故。  
             
            “<%#   %>”就是“作用”在Repeater上,但是if語(yǔ)句則不同,它是“作用”在整個(gè)頁(yè)面上。  
             
            當(dāng)然,用類似下面(三目運(yùn)算)的語(yǔ)句也可以實(shí)現(xiàn)上述功能:  
             
            <%#   ((int)(DataBinder.Eval(Container.DataItem,   "ReCount"))==0)   ?   "--"  
            :   DataBinder.Eval(Container.DataItem,   "LastReplyer")   %>  
             
            可問(wèn)題是,對(duì)于復(fù)雜的判斷處理,這樣的做法就相當(dāng)困難了。  
             
            那么   <%#   if   ...   else   ...   %>   這樣的又用法為什么也不行呢?  
             
            因?yàn)?  <%#   %>   想當(dāng)于   <%=   %>,而   <%=   %>   就是   Response.Write(),那么上面的判斷就顯得可笑:  
             
            Response.Write(   if   ...   else   ...   )  
             
            如果非要在Repeater中使用if語(yǔ)句來(lái)判斷其中的數(shù)據(jù),那么可以采用下面的方法:  
             
            ######################################################################  
             
            <%   int   _nIndex=0;   %>   定義一個(gè)臨時(shí)的整型變量  
             
            <asp:Repeater   ID="_TopicRepeater"   Runat="SERVER"   DataSource="...">  
            <ItemTemplate>  
            <%#   DataBinder.Eval(Container.DataItem,   "Title")   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "Author")   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "Clicked")   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "ReCount")   %>  
            <%  
            int   nCount=(int)(((DataView)_TopicRepeater.DataSource).Table.Rows[_nIndex++]["ReCount"]);  
             
            if(nCount==0)   {   %>  
            ----  
            <%   }   else   {   %>  
            <%#   DataBinder.Eval(Container.DataItem,   "LastReplyer")   %>  
            <%   }   %>  
            </ItemTemplate>  
            </asp:Repeater>  
             
            ######################################################################  
             
            其原理是,得到_TopicRepeater的數(shù)據(jù)源(DataSource),并返回該表(Table)的當(dāng)前行(Rows[_nIndex++])  
             
            最后判斷ReCount列是否為0?  
             
            在最初的時(shí)候_nIndex被賦值為0,然后,在每一次的ItemTemplate里都自加一次。  
             
            其目的,也就是讓_nIndex記錄當(dāng)前正在訪問(wèn)的記錄“行”。  
             
            完,希望能對(duì)您有所幫助...

          http://topic.csdn.net/t/20041021/15/3478270.html

          posted on 2008-09-24 13:08 渠上月 閱讀(4066) 評(píng)論(2)  編輯  收藏 所屬分類: other tips

          評(píng)論

          # re: 在Repeater控件中使用if語(yǔ)句(參考) 2012-11-15 09:23 游客
          不對(duì) <% int _nIndex=0; %>在Repeater里根本得不到  回復(fù)  更多評(píng)論
            

          # re: 在Repeater控件中使用if語(yǔ)句(參考)[未登錄] 2013-07-19 09:20 AA
          @游客恩,此方法錯(cuò)誤!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 洪泽县| 兴文县| 宁化县| 永兴县| 星子县| 汽车| 巩义市| 普兰县| 遵化市| 霍山县| 桂林市| 扎囊县| 绥中县| 株洲市| 堆龙德庆县| 临桂县| 济阳县| 普陀区| 东乌珠穆沁旗| 安西县| 措美县| 乐至县| 北安市| 南靖县| 湟中县| 安陆市| 云霄县| 白朗县| 太仆寺旗| 荃湾区| 南雄市| 松桃| 清远市| 巩留县| 土默特右旗| 资阳市| 河池市| 日土县| 台湾省| 巨鹿县| 淳安县|