欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

在Repeater控件中使用if語句

系統 2598 0
原文: 在Repeater控件中使用if語句

我最近正在寫一個 BBS 的項目,在顯示主題列表時,我遇到了一個問題。 BBS_Topic 的數據表結構定義大致是下面這樣:

            
              TABLE
            
             BBS_Topic

(

??? TopicID????? 
            
              INT NOT NULL
            
             IDENTITY(1, 1) 
            
              PRIMARY KEY
            
            ,

??? 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文件中的部分內容:

            <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語句 --
            
            >

??? 
            
              <% 
              
                if
              
              ((
              
                int
              
              )(DataBinder.Eval(Container.DataItem, 
              
                "ReCount"
              
              ))==0){ %>
            
            

??? ??? ----

??? 
            
              <% } 
              
                else
              
               { %>
            
            

 ?????? <%# DataBinder.Eval(Container.DataItem, "LastReplyer") %>

??? 
            
              <% } %>
            
            

</ItemTemplate>

</asp:Repeater>


          

使用if語句的目的是在于:判斷當前帖子的回復次數為 0 時,就將 LastReplyer 這項顯示成“----”。而當前的帖子的回復次數不為 0 時,則顯示回復人的名字。但是,這樣的做法是行不通的。在IE中會出現類似的警告
???????? 編譯器錯誤信息: CS0246: 找不到類型或命名空間名稱“Container”(是否缺少 using 指令或程序集引用?)
即便,根據這個錯誤提示,將所有可能用到的命名空間全都 Import 到這個文件里,也還是會提示其他錯誤信息的。至于為什么這樣?可能是因為 DataBinder.Eval Container.DataItem 同屬 Repeater 類的成員的緣故。 “ <%# %> ”就是“作用”在 Repeater 上,但是 “ if ... else ... ” 語句則不同,它是“作用”在整個頁面上。這就象是在全局過程中 直接訪問 局部變量。當然,用類似下面(三目運算)的語句也可以實現上述功能:

            <%# ((
            
              int
            
            )(DataBinder.Eval(Container.DataItem, 
            
              "ReCount"
            
            ))==0)

?? ?? 
            
              "----"
            
            

?? ?: DataBinder.Eval(Container.DataItem, 
            
              "LastReplyer"
            
            ) %>


          

可問題是,對于復雜的判斷處理,這樣的做法就相當困難了。
而 <%# if ... else ... %> 這樣的用法又為什么也不行呢?因為 <%# %> 相當于 <%= %>,而 <%= %> 就是 Response.Write(),那么前面的判斷就顯得可笑:
???????? Response.Write( if ... else ... );
如果非要在 Repeater 中使用 if 語句來判斷其中的數據,那么可以采用下面的方法:

            
              <% 
              
                int
              
               _nIndex=0; %>
            
             <
            
              !--定義一個臨時的整型變量--
            
            >

<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
              
               nReCount=(
              
                int
              
              )(((DataView)_TopicRepeater.DataSource).Table.Rows[_nIndex++][
              
                "ReCount"
              
              ]);


              
                // 也可以分成幾句來寫 // DataView DV=(DataView)_TopicRepeater.DataSource; // DV.Table.Rows[_nIndex++]["ReCount"];
              
              
                if
              
              (nReCount==0) { %>
            
            

???? ----


            
              <% } 
              
                else
              
               { %>
            
            

??? <%# DataBinder.Eval(Container.DataItem, "LastReplyer") %>


            
              <% } %>
            
            

</ItemTemplate>

</asp:Repeater>


          

其基本思路是,得到 _TopicRepeater 的數據源(DataSource)
(注明:我在綁定 Repeater 的數據源時,使用的是 DataSet.Tables["..."].DefaultView。如果使用的是其他的數據源,那么在給 Repeater.DataSource 強制轉型時,要稍加注意)
并返回該表(Table)的當前行(Rows[_nIndex++])最后判斷 ReCount 列是否為 0?在最初的時候 _nIndex 被賦值為 0,然后,在每一次的 ItemTemplate 里都自加一次。其目的,也就是讓 _nIndex 記錄當前正在訪問的記錄“行”。
對于DataGrid和DataList,這個方法也是可行的。

最后,這個方法在進行復雜判斷綁定數據時確實有效, 但是我并不推薦這樣的做法 !因為這樣的做法并不符合面向對象的封裝特性,或者說,它是以破壞了封裝特性的做法使之透明,來完成判斷功能的。 我推薦的做法是,使用“自定義用戶控件”來完成復雜的判定綁定任務
完,希望能對您有所幫助...

Afritxia2003@Yahoo.com.cn Afritxia@Hotmail.com

在Repeater控件中使用if語句


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品福利在线视频 | 久久综合亚洲一区二区三区 | 国产成人精品影院狼色在线 | www.99xxxx.com| 欧美性色综合网 | 澳门永久av免费网站 | 99爱国产 | 国产精品视频99 | 色综合天天综合网国产成人 | 九九九色 | 国产精品久久久久无码人妻 | 久热这里只有精品视频6 | 久久噜噜噜精品国产亚洲综合 | 欧美日韩国产一区二区三区不卡 | 男女拍拍拍无挡免费视频 | 午夜婷婷精品午夜无码A片影院 | 91精品一区二区三区久久久久久 | 水野朝阳128部合集在线 | 成人免费体验区福利云点播 | 91在线播放视频 | 九色网址| 欧美理论影院在线观看免费 | 91精品国产综合久久婷婷香蕉 | 国产三级理论 | 日韩精品www| 精品一区二区三区四区五区六区 | 欧美精品二区三区 | 久草网站 | 奇米第四色在线观看 | 清纯唯美亚洲激情 | 国产牛仔裤系列在线观看 | 激情亚洲视频 | 麻豆免费永久网址入口网址 | 久久中文字幕视频 | 免费乱理伦片在线观看八戒 | 91短视频黄| 日韩高清不卡 | 中文字幕 在线观看 | 国产欧美曰韩一区二区三区 | 日韩黄色在线视频 | 午夜国产电影 |