对于数据库字段为空时,在B/S结构下的处理方式很多,而到了dotNet时代,就和原来有了本质的不同,根本就在于更强调服务器的自行处理。下面一步一步地从大家最熟悉的东西开始说。
首先用一个简单的ASP+Access留言本为例。数据库中对于每一个留言都有对应的一个回复,并且,只要回复了的留言将会用一个数据类型未bit的messageStatus字段来标记,回复了的用“1”来标记,否则用“0”(下面只给出关键部分代码,也就是判断messageStatus字段的值是真还是假):
<% if messageRs("messageStatus")=False then %> ................(此处省略了html代码) <% else set replyRs = Server.CreateObject("adodb.recordset") replySql = "select * from reply where messageId = " & messageRs("messageId") replyRs.Open replySql,conn %> ................(此处省略了html代码) <% replyRs.Close set replyRs = nothing end if %> |
而在ASP.NET中,由于程序代码已经完全可以和html代码分开,加上所提供的服务器端控件,使我们必须要找到一种适合于ASP.NET的方式。下面就直接进入我们的正题,和大家一起探讨在ASP.NET如何更好的实现。
下面还以留言板为例。
第一种——
可以这样解决,在cs页里写一函数,用于判断一个帖子是否有回复,如果有回复,则返回回复的内容,没有则返回“无回复”。然后把这个方法绑定到DataGrid或者DataList,或者Reapter空间的itemtemplate中的一个Label控件上。
下面是一个例子,用于显示某个图片,首先用IsImageAvailable()方法判断是否存在这幅图片,返回是一个布尔值,从而控制img控件和Label控件是否显示.如果有图片,则img控件显示,否则显示Label控件。
<asp:TemplateColumn runat="server" HeaderText="Photo"> <itemtemplate> <img runat="server" width="50" visible='<%#IsImageAvailable(DataBinder.Eval(Container.DataItem, "lastname").ToString()) %>' src='<%#"images\\" + DataBinder.Eval(Container.DataItem, "lastname") + ".bmp" %>' /> <asp:label runat="server" text="<i><small>没有图片可显示。</small></i>" visible='<%#IsImageAvailable(DataBinder.Eval(Container.DataItem, "lastname").ToString()) %>' /> </itemtemplate> </asp:TemplateColumn>
//IsImageAvailable()函数 private bool IsImageAvailable(String strLastName) { String strImageFile = "images\\" + strLastName + ".bmp"; return File.Exists(Server.MapPath(strImageFile)); } |
解决思路大概就是这样,当没有图片时用Label控件显示"No picture available"。
第二种——
留言板的数据显示使用DataGrid控件,那么就容易了。使用DataGrid控件显示数据的时候,如果字段值为NULL,它会自动默认为空。所以我们可以把数据存为一个DATASET,然后再绑定到DataGrid上,使用FOR 循环来判断,如果一个字段为空,如下赋值:
for (int i, i<ds.table[0].rows.count,i++) { if ds.table[0].row["字段名"] = null { ds.table[0].row["字段名"] = "未回复"; } } |
第三种——
直接只用SQL语句。大家先来看看这样一个SQL语句:
select GuestName,GuestContact,GuestEmot,PostTitle,PostContent,PostTime,PostIP,case when(ReplyContent is null) then '未回复' else ReplyContent end as reply from GuestBook order by Id desc
|
一共有 0 条评论