ASP.NET 动态数据教程-自定义字段

作者:vkvi 来源:ITPOW(原创) 日期:2009-4-6

汉化

至此我们发现程序运行之后,字段名字都是英文的,比如 ProductId、ProductName,我们想换成中文的。

双击 Cftea.dbml,打开对象关系设计器,将类名和类字段改为想要的中文就可以了(当然这只是一种简单快速的方法,但还有更好的方法——ASP.NET 动态数据教程-用 DisplayName 汉化)。

ASP.NET 动态数据教程-自定义字段:汉化

ASP.NET 动态数据教程-自定义字段:汉化

ASP.NET 动态数据教程-自定义字段:汉化

ASP.NET 动态数据教程-自定义字段:汉化

自定义字段模板(请注意后面的“重要说明”)

现在的需求是把产品名称中字数超过 5 个字符的用红色显示,其他的用默认颜色。虽然这个需求有点奇怪,但我们只是用来演示如何自定义字段模板。

在 DynamicData/FieldTemplates/ 文件夹上右键->添加->新建项。在弹出对话框中选择“Dynamic Data 字段”,取名为“MyText.ascx”,确定。自动生成“MyText.ascx”和“MyText_Edit.ascx”,一个是用于显示的,一个是用于增加、修改的。

将 MyText.ascx 改一下:

<asp:Label ID="Label1" runat="server">
    <asp:Literal runat="server" ID="Literal1" 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")]

运行效果

ASP.NET 动态数据教程-自定义字段:自定义字段模板

重要说明

如果我们更改了 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
}
相关文章