我最近正在写一个 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中会出现类似的警告 <%# ((int)(DataBinder.Eval(Container.DataItem, "ReCount"))==0) ? "----" : DataBinder.Eval(Container.DataItem, "LastReplyer") %> 可问题是,对于复杂的判断处理,这样的做法就相当困难了。 <% 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控件中使用if语句,布布扣,bubuko.com
原文:http://www.cnblogs.com/lonelyxmas/p/3604387.html