我正在使用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 };
}
答案 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();
}
}