首页 > 解决方案 > 寻找一种在整数列上自动过滤字符串的方法

问题描述

我正在将 devexpress gridview 用于车辆管理程序,并得到一列显示该行的数据是否标记为已删除。在数据库中,它们标记为“1”表示活动,“11”表示已删除,所以我创建了一个枚举类:

public enum enmSystemstatus
{
    Created = 1, 
    Deleted = 11
}

这个事件用一个单词而不是gridview中的数字来标记它们:

private void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
    {
        if (e.Column == colVehicle_Systemstatus && e.Value != null)
        {
            e.DisplayText = (int)e.Value == (int)enmSystemstatus.Created ? "Active" : "Deleted";
        }
    }

但是程序也应该可以使用自动过滤行,但是如果我在系统状态列的搜索框中输入一个字母,程序就会崩溃,因为无法转换这些值,就会调用异常:

“system.invalidcastexception 指定的强制转换无效。”

这可能是因为数据库上的列是整数列,但将其更改为 varchar 不会影响某些内容

有没有人解决这个问题?

提前致谢

标签: c#winformsdevexpress

解决方案


DevExpress 组件(例如GridControl)支持广泛的注释属性,允许您有效地将数据库中的整数值映射到特定的枚举成员,并为每个枚举成员提供有意义的和可本地化的描述:

public enum DisplayStatus {
    [Display(Name = "ACTIVE")]
    Active= 1,
    [Display(Name = "DELETED")]
    Deleted = 11
}
public class Vehicle_DTO {
    [EnumDataType(typeof(DisplayStatus))]
    [Display(Name = "STATUS")]
    public int Status { get; set; }
}
// ...
gridControl1.DataSource = new List<Vehicle_DTO> {
    new Vehicle_DTO() { Status = 1 },
    new Vehicle_DTO() { Status = 11 },
    new Vehicle_DTO() { Status = 11 },
};

此自定义将应用于所有 UI 元素,包括没有任何事件处理和错误的过滤器:
注释属性在行动


推荐阅读