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

