欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 日本在线高清视频 | 奇米影视图片 | 久久综合婷婷香五月 | 亚洲精品免费网站 | 日韩深夜福利 | 欧美高清3dfreexxxx性 | 久草老司机 | 91视频青娱乐 | 99久久精品国产高清一区二区 | 日日网站 | 久久丁香 | 日韩 欧美 国产 亚洲 中文 | 成人福利在线视频 | 久久久久久亚洲 | 日本高清视频www | 国产乱码一区二区三区四 | 国产精品日本一区二区在线播放 | 国产大伊香蕉精品视频 | 色偷偷噜噜噜亚洲男人 | 亚洲一级毛片免费看 | 国产乳摇福利视频在线观看 | 一区二区三区四区在线 | 水中色av综合 | 欧洲免费在线视频 | 国产精彩视频 | 亚洲美女黄色 | 特级黄色小说 | 欧美精品一区二区三区在线 | 精品久久香蕉国产线看观看亚洲 | 一区二区三区四区免费 | 黄色国产视频 | 亚洲视频一区在线观看 | 成人免费视频网址 | 青草娱乐极品免费视频 | 国产精品高清在线 | 男女爽爽无遮挡午夜动态图 | 一级黄色a视频 | 美女超碰| 丝袜捆绑调教视频免费区 | 亚洲欧洲中文日韩久久AV乱码 | 玖玖精品视频在线观看 |