Показывать текстовую часть вместо числового перечисления в столбце - PullRequest
1 голос
/ 22 марта 2012

Я использую ultragrid Infragistic и хочу показать текстовую часть свойства enum. Я пытался сделать это так

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 ]

4 голосов
/ 23 марта 2012

Это расширение 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;
}

Вы вызываете его в событии InitializeLayout вашего UltraWinGrid для соответствующего столбца

UltraGridColum cl = e.Layout.Bands[0].Columns["Gender"];
cl.ValueList = cl.ToValueList("gender_list", typeof(GenderEnum));

, имеющего GenderEnumопределяется как:

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

Конечно, я предполагаю, что ваш источник данных содержит столбец с соответствующими значениями вашего перечисления.(В моем случае у меня есть столбец Gender со значениями 0 и 1)

2 голосов
/ 22 марта 2012

Вам нужно будет получить имя перечисления:

row.Cells["LevelId"].Value = Enum.GetName(typeof(YourEnum), row.Cells["LevelId"]);
1 голос
/ 23 марта 2012

Попробуйте явное приведение:

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