汉化
至此我们发现程序运行之后,字段名字都是英文的,比如 ProductId、ProductName,我们想换成中文的。
双击 Cftea.dbml,打开对象关系设计器,将类名和类字段改为想要的中文就可以了(当然这只是一种简单快速的方法,但还有更好的方法——ASP.NET 动态数据教程-用 DisplayName 汉化)。
自定义字段模板(请注意后面的“重要说明”)
现在的需求是把产品名称中字数超过 5 个字符的用红色显示,其他的用默认颜色。虽然这个需求有点奇怪,但我们只是用来演示如何自定义字段模板。
在 DynamicData/FieldTemplates/ 文件夹上右键->添加->新建项。在弹出对话框中选择“Dynamic Data 字段”,取名为“MyText.ascx”,确定。自动生成“MyText.ascx”和“MyText_Edit.ascx”,一个是用于显示的,一个是用于增加、修改的。
将 MyText.ascx 改一下:
<asp:Label runat="server">
<asp:Literal runat="server" Text="<%# FieldValueString %>" ondatabinding="Literal1_DataBinding" />
</asp:Label>
为 Literal1 增加事件处理
protected void Literal1_DataBinding(object sender, EventArgs e)
{
string value = Convert.ToString(FieldValue);
if (value.Length > 5)
{
Label1.ForeColor = System.Drawing.Color.Red;
}
}
最后一步,打开 Cftea.designer.cs,找到产品名称属性,为该属性添加属性如下:
[System.ComponentModel.DataAnnotations.UIHint("MyText")]
运行效果
重要说明
如果我们更改了 Cftea.designer.cs,就不能再在对象关系设计器中作任何更改了,否则 Cftea.designer.cs 文件的更改会丢失,因为对象关系设计器总是按自己的数据重新生成代码,而忽视我们添加或更改的某些部分。
解决办法是不改动 Cftea.designer.cs,而是在 Cftea.cs 上做文章,只是要麻烦些。如上,展开 Cftea.dbml,打开 Cftea.cs。如果不存在 Cftea.cs,则在 App_Code 下新建一个即可。
[System.ComponentModel.DataAnnotations.MetadataType(typeof(ProductsMetadata))]
public partial class Products
{
}
public class ProductsMetadata
{
[System.ComponentModel.DataAnnotations.UIHint("MyText")]
public object ProductName; // 类型使用 object
}