Dan*_*Tao 4 datagridview string-formatting iformatprovider winforms
所以,也许这是一个糟糕的设计; 我不知道.但是我说有一个DataTable包含int值的列; 这些值实际上是代表enum我在项目中的某种类型.
我想要做的是DataGridView绑定到这个表并让列显示的是名称enum而不是整数值"0"或"1"或其他什么.
我考虑的一个选择是做整个正常化的事情:添加在表DataSet与enum它的名称,键入的enum值,并有我的第一台坚持一个参考此表.
但这是一个enum特定的想法.我想知道,如果在一般情况下,我可以写我自己IFormatProvider,并ICustomFormatter实现*给定类型,并使用该格式来控制值的方式显示在一个给定的列DataGridView控(还是真的在任何控制,对于这个问题) .
*这就是我怀疑它会如何完成,如果我所要求的是可能的话.我根本没有完全使用这些接口.
Bra*_*ith 12
您确实可以实现自定义ICustomFormatter,但由于某些方面的延迟DataGridView,您需要实际告诉它如何应用您的格式化程序.
首先设置column.DefaultCellStyle.FormatProvider为自定义格式类的实例.然后,处理CellFormatting事件:
void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.CellStyle.FormatProvider is ICustomFormatter) {
e.Value = (e.CellStyle.FormatProvider.GetFormat(typeof(ICustomFormatter)) as ICustomFormatter).Format(e.CellStyle.Format, e.Value, e.CellStyle.FormatProvider);
e.FormattingApplied = true;
}
}
Run Code Online (Sandbox Code Playgroud)
formatter类看起来像这样:
public class MyEnumFormatter : IFormatProvider, ICustomFormatter {
public object GetFormat(Type formatType) {
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider) {
return ((NameOfEnumType)Convert.ToInt32(arg)).ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |