C# 在中显示文本部分,而不是列中枚举的数字部分

C# 在中显示文本部分,而不是列中枚举的数字部分,c#,.net,enums,infragistics,ultrawingrid,C#,.net,Enums,Infragistics,Ultrawingrid,我正在使用infragistic的ultragrid,我想显示枚举属性的文本部分。我试着这样做 private void MapToLevel() { foreach (var row in HistoryGrid.Rows) { row.Cells["LevelId"].Value = row.Cells["LevelId"].Value.ToString(); } } 这不会改变任何事情 这里正在调用此方法 public new void Refresh

我正在使用infragistic的ultragrid,我想显示枚举属性的文本部分。我试着这样做

private void MapToLevel()
{
   foreach (var row in HistoryGrid.Rows)
    {
       row.Cells["LevelId"].Value = row.Cells["LevelId"].Value.ToString();
    }
}
这不会改变任何事情

这里正在调用此方法

public new void Refresh()
 {
    LoadData();
    HistoryGrid.DataSource = null;
    HistoryGrid.DataSource = _BindingSource;
    HistoryGrid.DataBind();
    MapToLevel();
}

private void LoadData()
{
   _histories = _controller.GetAll(_personId, _companyId);
   _BindingSource = new BindingSource { DataSource = _histories };
}

您需要获取枚举的名称:

row.Cells["LevelId"].Value = Enum.GetName(typeof(YourEnum), row.Cells["LevelId"]);

您需要获取枚举的名称:

row.Cells["LevelId"].Value = Enum.GetName(typeof(YourEnum), row.Cells["LevelId"]);
尝试显式强制转换:

private void MapToLevel()
{
   foreach (var row in HistoryGrid.Rows)
    {
       row.Cells["LevelId"].Value = ((myEnumType)row.Cells["LevelId"].Value).ToString();
    }
}
尝试显式强制转换:

private void MapToLevel()
{
   foreach (var row in HistoryGrid.Rows)
    {
       row.Cells["LevelId"].Value = ((myEnumType)row.Cells["LevelId"].Value).ToString();
    }
}

这是一个UltraGridColumn扩展,用于转换值列表中的枚举

public static ValueList ToValueList(this UltraGridColumn cl, string vlKey, Type t)
{
    ValueList vl = new ValueList();
    if (vlKey != string.Empty) vl.Key = vlKey;
    if (t.IsEnum == true)
    {
        // Get enum names
        string[] names = Enum.GetNames(t);
        Array a = Enum.GetValues(t);

        int i = 0;
        foreach (string s in names)
            vl.ValueListItems.Add(a.GetValue(i++), s.Replace("_", " "));
    }
    cl.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.DropDownList;
    return vl;
}
在UltraWinGrid的InitializeLayout事件中为正确的列调用它

UltraGridColum cl = e.Layout.Bands[0].Columns["Gender"];
cl.ValueList = cl.ToValueList("gender_list", typeof(GenderEnum));
具有性别的,定义为:

public enum GenderEnum
{
    Female = 0,
    Male = 1
}

当然,我假设您的数据源包含一个列,该列具有相应的枚举值。(在我的例子中,我有一个值为0和1的列Gender)

这是一个UltraGridColumn扩展,用于转换值列表中的枚举

public static ValueList ToValueList(this UltraGridColumn cl, string vlKey, Type t)
{
    ValueList vl = new ValueList();
    if (vlKey != string.Empty) vl.Key = vlKey;
    if (t.IsEnum == true)
    {
        // Get enum names
        string[] names = Enum.GetNames(t);
        Array a = Enum.GetValues(t);

        int i = 0;
        foreach (string s in names)
            vl.ValueListItems.Add(a.GetValue(i++), s.Replace("_", " "));
    }
    cl.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.DropDownList;
    return vl;
}
在UltraWinGrid的InitializeLayout事件中为正确的列调用它

UltraGridColum cl = e.Layout.Bands[0].Columns["Gender"];
cl.ValueList = cl.ToValueList("gender_list", typeof(GenderEnum));
具有性别的,定义为:

public enum GenderEnum
{
    Female = 0,
    Male = 1
}

当然,我假设您的数据源包含一个列,该列具有相应的枚举值。(在我的例子中,我有一个值为0和1的性别专栏)

你在基础设施论坛上问过吗?@WillemvanRumpt是的,他们反应很慢,像usualokikodok:)每次我看到一个问题“…我在使用,想…”说服:)你在基础设施论坛上问过吗?@WillemvanRumpt是的,他们的反应很慢,如Usualokikoke:)每次我看到一个关于“…我正在使用,并且想要…”的问题,我都忍不住要问:)我在尝试你们的方式,但它不允许我解析、转换或将当前值(字符串)转换为int32。@atbyrd row.Cells[“LevelId”].value、“1”或“EnumName”的值是多少?实际上,并不是你的建议造成了错误。网格需要int32,但我给了它一个字符串。我正在尝试您的方法,但它不允许我将当前值(字符串)解析、转换或强制转换为int32。@atbyrd row.Cells[“LevelId”].value、“1”或“EnumName”的值是多少?实际上不是您的建议造成了错误。网格需要int32,但我给它一个字符串