微型项目实践(11):控件与格式化显示
2008-05-27 11:02
369 查看
上一篇文章中,我们简单的分析了页面的设计,今天我们来看页面中的动态部分。Master和Default页面中的主要控件如下表:
在页面中,有很多需要格式化显示的地方,比如系统规定日期的显示规则为:如果时间中的时分秒都为零,则使用类似“2008年5月27日”的方式显示,否则,使用“2008年5月27日10:02:59”这样的方式显示;还有字符串的截断、布尔型类使用“是/否”显示、空字符串使用“ ”显示,以及各种枚举类型的显示等。对于这样的显示规则,我们使用Extension方法实现。如日期的显示使用以下代码(位于\DongBlog.UI\ToShowExtension.cs):
在ListView_BlogList中,使用到了该方法,用于显示日志的更新时间:
该方法把UpdateDateTime求值后,转化为DateTime类型,然后调用ToShow()方法。如果你觉得类型转换不优雅的话,还可以这样写:
这种写法对于显示实体的关系数据非常方便,比如显示该日志对应的分类,我们使用这样的写法:
这种方法利用了Linq对实体关系数据的LazyLoad,当读取Blog的BlogClass属性时,如果对应的BlogClass未被读取,则系统自动加载。
格式化显示的方法还能用于很多方面,例如,我们可以对PageBase类进行扩展,用于执行JavaScript:
还可以对表示“钱”的数字的输入输出抽象出来,假设系统规定页面中的“钱”都以万为单位,而数据库中以分为单位储存、业务层以分为单位运算,则我们只需要以下扩展类:
则我们在页面中可以使用:
将“1230000分”格式化“1.23万”,如果ToShowAsMoney的参数为false,则会格式化为“1.23”。
而在代码中可以可以用:
将用于基于“万元”填入的数额转化为分为单位的。这种方法的最大好处在于便于修改,假设系统以后要以“千”或者“百”或者“元”为单位,只要修改MONEY_UNIT和MONEY_UNIT_NAME两个常量即可。
页面辅助方法的使用还有很多,凡是页面实现逻辑,几乎都可以用该方法进行抽象。(RubyOnRails的Helper方法也是这个思路)
回到我们的项目中来,现在,按下F5看一下效果了:
页面中ListView_BlogClass、ListView_BlogList和LiteralPageCount未绑定任何数据,所以没有显示出来。下一篇文章中,我们来看数据的绑定和显示。
代码下载
控件ID | 描述 |
Calendar | Asp.Net自带的日历控件,使用自带的样式,以后我们会使用该控件实现根据日期的查询。 |
ListView_BlogClass | ListView,用于显示日志分类。该控件生成的Html全部是连接,不需要响应事件,故EnableViewState设置为false。 |
ListView_BlogList | ListView,用于显示日志。该控件需要响应部分事件,所以其一部分子控件的EnableViewState设置为false,需要响应事件的部分设置为true。 |
LiteralPageCount | Literal,用于显示分页。这个控件结合我们自己的分页Helper使用。 |
///<summary>
///显示日期
///</summary>
///<paramname="dateTime">要显示的日期</param>
///<returns>日期字符串</returns>
publicstaticStringToShow(thisDateTimedateTime)
{
if(dateTime.TimeOfDay==TimeSpan.Zero)
returnstring.Format("{0:yyyy年MM月dd日}",dateTime);
else
returnstring.Format("{0:yyyy年MM月dd日}{0:T}",dateTime);
}
在ListView_BlogList中,使用到了该方法,用于显示日志的更新时间:
<divrunat="server"enableviewstate="false"class="BlogUpdateDateTime">
<%#((DateTime)Eval("UpdateDateTime")).ToShow()%>
</div>
该方法把UpdateDateTime求值后,转化为DateTime类型,然后调用ToShow()方法。如果你觉得类型转换不优雅的话,还可以这样写:
<divrunat="server"enableviewstate="false"class="BlogUpdateDateTime">
<%#(Container.DataItemasBlog).UpdateDateTime.ToShow()%>
</div>
这种写法对于显示实体的关系数据非常方便,比如显示该日志对应的分类,我们使用这样的写法:
分类:<ahref="Default.aspx?BlogClassID=<%#(Container.DataItemasBlog).BlogClass.ID%>">
<%#(Container.DataItemasBlog).BlogClass.Name%></a>
这种方法利用了Linq对实体关系数据的LazyLoad,当读取Blog的BlogClass属性时,如果对应的BlogClass未被读取,则系统自动加载。
格式化显示的方法还能用于很多方面,例如,我们可以对PageBase类进行扩展,用于执行JavaScript:
///<summary>
///采用JavaScript的Alert()方法向客户端显示信息
///</summary>
///<paramname="page">页面</param>
///<paramname="message">要显示的信息</param>
publicstaticvoidJs_ShowMessage(thisPagepage,stringmessage)
{
if(page==null)
thrownewArgumentNullException("page");
page.Response.Write("<scriptlanguage=javascript>
alert(\""+message.Replace("\r\n","\\n")+"\")</script>");
page.Response.Flush();
}
还可以对表示“钱”的数字的输入输出抽象出来,假设系统规定页面中的“钱”都以万为单位,而数据库中以分为单位储存、业务层以分为单位运算,则我们只需要以下扩展类:
///<summary>
///金额的相关扩展
///</summary>
publicstaticclassMoneyExtension
{
///<summary>
///资金的单位
///</summary>
publicconstlongMONEY_UNIT=10000*100;
///<summary>
///资金的单位名称
///</summary>
publicconststringMONEY_UNIT_NAME="万元";
///<summary>
///将整数作为资金数额来显示,单位为:万。
///</summary>
///<paramname="money">要显示的数额</param>
///<paramname="withUnit">是否包含单位</param>
///<returns>要显示的字符串</returns>
publicstaticStringToShowAsMoney(thislongmoney,boolwithUnit)
{
if(withUnit)
return(((float)money)/MONEY_UNIT).ToString()+MONEY_UNIT_NAME;
else
return(((float)money)/MONEY_UNIT).ToString();
}
///<summary>
///将整数作为资金数额来显示,单位为:万。
///</summary>
///<paramname="money">要显示的数额</param>
///<paramname="withUnit">是否包含单位</param>
///<returns>要显示的字符串</returns>
publicstaticStringToShowAsMoney(thislong?money,boolwithUnit)
{
if(money.HasValue)
returnmoney.Value.ToShowAsMoney(withUnit);
else
return"无数据";
}
///<summary>
///将字符串转化为金额
///</summary>
///<paramname="money">表示金额的字符串</param>
///<returns>金额</returns>
publicstaticlong?ToMoney(thisstringmoney)
{
returnstring.IsNullOrEmpty(money)?null:
newint?(Convert.ToInt32(Convert.ToDecimal(money)*MONEY_UNIT));
}
}
则我们在页面中可以使用:
<%#(Container.DataItemasPayPlanItem).Amount.ToShowAsMoney(true)%>
将“1230000分”格式化“1.23万”,如果ToShowAsMoney的参数为false,则会格式化为“1.23”。
而在代码中可以可以用:
project.Amount=TextBoxAmount.Text.ToMoney();
将用于基于“万元”填入的数额转化为分为单位的。这种方法的最大好处在于便于修改,假设系统以后要以“千”或者“百”或者“元”为单位,只要修改MONEY_UNIT和MONEY_UNIT_NAME两个常量即可。
页面辅助方法的使用还有很多,凡是页面实现逻辑,几乎都可以用该方法进行抽象。(RubyOnRails的Helper方法也是这个思路)
回到我们的项目中来,现在,按下F5看一下效果了:
页面中ListView_BlogClass、ListView_BlogList和LiteralPageCount未绑定任何数据,所以没有显示出来。下一篇文章中,我们来看数据的绑定和显示。
相关文章推荐
- 微型项目实践(12):查询与显示
- MVC项目实践,在三层架构下实现SportsStore-11,使用Knockout实现增删改查
- vs上面不显示项目里的自定义的控件
- 外包频道最成功的项目——CSDN外包实践(11)
- 微型项目实践(1):用XML描述实体
- OA项目11:部门列表树状显示功能及其他代码优化
- 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
- 解决WebForm项目在高版本IE下控件显示异常的问题
- 控件(按键、输入部件、显示控件、空间间隔、布局管理、容器、项目视图)
- 微型项目实践(2):用测试驱动代码生成
- HTML5学习总结-11 IOS 控件WebView显示网页
- 11-界面控件ListView之使用SimpleAdapter实现复杂的界面显示
- IOS 应用/游戏项目应该如何灵活封装 控件显示样式与项目颜色的公用
- 艾伟也谈项目管理,微型项目实践感悟
- 提高第38课时,实践2,项目2 - 带行号显示文件
- 微型项目实践(5):Business层代码分析——实体基类
- 微型项目实践(3):实体代码的生成
- Easy ui DateBox 控件格式化显示操作
- FLEX实践—控件内容与String显示区别
- DevExpress 中 DateEdit 控件 格式化显示和编辑的日期格式为: yyyy-MM-dd