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

时间:2012-03-22 19:49:33

标签: c# .net enums infragistics ultragrid

我正在使用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 };
}

3 个答案:

答案 0 :(得分:4)

这是一个UltraGridColumn扩展,用于转换ValueList

中的枚举
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));

将GenderEnum定义为:

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

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

答案 1 :(得分:2)

您需要获取枚举的名称:

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

答案 2 :(得分:1)

尝试显式投射:

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