亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

在Repeater控件中使用if語句

系統 2521 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條評論
主站蜘蛛池模板: 暴力欧美娇小 videos | 国产欧美在线观看 | 91香蕉网站 | 欧美精品国产日韩综合在线 | 天天干天天在线 | 一级毛片免费毛片一级毛片免费 | 久久精品国产清白在天天线 | 日日摸日日添日日透 | 日本视频久久 | 97视频在线看 | 国产高清国内精品福利色噜噜 | 精品亚洲一区二区在线播放 | 色综综| 99热视热频这里只有精品 | 国内精品日本久久久久影院 | 亚洲va在线va天堂va手机 | 国产呦系列呦交 | 精品国产品欧美日产在线 | 久草视频在线播放 | 免费播放美女一级毛片 | 精品视频一区在线观看 | 日日摸夜夜摸狠狠摸97 | 999久久精品国产 | 一级一级一级一级毛片 | 精品久久不卡 | 欧美日韩有码 | 国产理论最新国产精品视频 | 妖精视频在线看免费视频 | 亚洲国产成人综合 | 久久这里精品 | 日本中文一二区有码在线观看 | 奇米四色影视 | 日韩在线中文字幕 | 久久厕所精品国产精品亚洲 | 仑乱高清在线一级播放 | 91成人在线 | 老司机午夜精品视频你懂的 | 久久久精品2018免费观看 | 国产亚洲精品yxsp | 免费刺激性视频大片区 | 特大一级aaaaa毛片 |