情况如下:
我有Form
,其中包含DataGridView
。 DataGridView
绑定到对象BindingSource
。
绑定的对象具有Property
,这是枚举。
我想要做的是在DataGridView
中添加一列,但不是显示枚举的数量,而是要将其映射到String
有一种简单的方法吗?
我正在考虑向返回我要展示的Property
的模型添加另一个String
,但如果可能的话,我想避免这种情况。
编辑:
enum
就是这样:
public enum FilterClass
{
TypeAFilter = 1,
TypeBFilter = 2,
TypeCFilter = 3
};
我对C#世界很陌生,所以也许我做错了什么
答案 0 :(得分:1)
我将在BusinessObject类中创建一个新字段,该字段表示枚举的字符串表示形式,并将DataGridView的Column绑定到此属性。这种方法是否符合您的要求?
public string EnumString {
get {
FilterClass fClass = this.FilterClass;
return fClasss.ToString();
}
}
答案 1 :(得分:1)
您是否想要在字符串表示中获取每个枚举的名称
例如在你的班级做类似的事情
这只是你放置Enum声明的一个例子请让我知道如果这是你想要的其他明智我将不得不改变我的答案
namespace sampleLogin
{
public enum FilterClass
{
TypeAFilter = 1,
TypeBFilter = 2,
TypeCFilter = 3
};
public partial class frmLogin : Form
{
public frmLogin()
{
InitializeComponent();
foreach (FilterClass fltClass in Enum.GetValues(typeof(FilterClass)))
{
Console.WriteLine(fltClass.ToString());
}
}
}
答案 2 :(得分:1)
让我们假设您无法更改业务对象(我们假设它是第三方组件),您可以简单地创建自定义列:
private void Form1_Load(object sender, EventArgs e)
{
// filling up example data
var s = new List<InfoItem>();
s.Add(new InfoItem() { PropertyA = "PA", PropertyB = 1, PropertyC = DateTime.Now, PropertyD = InfoItemType.Item_B });
s.Add(new InfoItem() { PropertyA = "PB", PropertyB = 2, PropertyC = DateTime.Now, PropertyD = InfoItemType.Item_C });
s.Add(new InfoItem() { PropertyA = "PC", PropertyB = 3, PropertyC = DateTime.Now, PropertyD = InfoItemType.Item_A });
s.Add(new InfoItem() { PropertyA = "PD", PropertyB = 4, PropertyC = DateTime.Now, PropertyD = InfoItemType.Item_B });
// assign my collection to the DataGrid
dg.DataSource = s;
// let's create one more column at the end
var column = new DataGridViewColumn();
column.CellTemplate = new DataGridViewTextBoxCell();
column.HeaderText = "Custom Column";
column.Name = "customColumn"; // important name to remember
column.DataPropertyName = "PropertyD"; // the Enum Property
dg.Columns.Add(column); // add the column
}
// let's make the use of the `CellFormatting` event
private void dg_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// If the column is the "customColumn", check the value.
if (this.dg.Columns[e.ColumnIndex].Name == "customColumn")
{
if (e.Value != null)
{
// let's change to whatever we want...
switch ((InfoItemType)e.Value)
{
case InfoItemType.Item_A: e.Value = "I'm A"; break;
case InfoItemType.Item_B: e.Value = "I'm B"; break;
case InfoItemType.Item_C: e.Value = "I'm C"; break;
default: e.Value = "I'm not..."; break;
}
}
}
}
请记住将事件附加到DataGridView
对象
然后结果将是这样的:
答案 3 :(得分:0)
您可以为DataGridView.CellFormatting
编写事件处理程序。在处理程序中,第一个参数是DataGridView(声明为对象),第二个参数是DataGridViewCellFormattingEventArgs
类型,它有一个属性ColumnIndex
。如果调用是针对正确的列索引,那么您可以从row
获取cell
和DataGridView
,然后以您喜欢的方式格式化单元格。
还有一种更复杂的方法,您可以将事件处理程序分配给列,但我在此不再重复。如果您对此方法感兴趣,请参阅我的其他帖子。
因此,在您想要显示的对象上创建另一个属性可能更简单。但我已经为完整性添加了这个答案。