我最近正在写一个 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)
|