gpt4 book ai didi

winforms - 在 DataGridView 中使用自定义格式化程序

转载 作者:行者123 更新时间:2023-12-04 22:25:26 24 4
gpt4 key购买 nike

所以,也许这是一个糟糕的设计;我不知道。但是假设我有一个 DataTable有一列包含 int值(value)观;这些值实际上是为了代表一些 enum我在项目中的类型。

我想做的是有一个 DataGridView绑定(bind)到此表并让列显示 enum 的名称而不是整数值“0”或“1”或其他。

我考虑的一个选择是做整个标准化的事情:在 DataSet 中添加一个表。与 enum里面的名字,键入enum值,并让我的第一个表包含对该表的引用。

但这是一个 enum ——具体的想法。我想知道,一般来说,我是否可以自己写IFormatProviderICustomFormatter给定类型的实现*,并使用该格式化程序来控制值如何在 DataGridView 的给定列中显示控制(或实际上在任何控制中,就此而言)。

*这就是我怀疑的方式,如果我问的是可能的话。我对使用这些界面并没有真正的死心塌地。

最佳答案

您确实可以实现自定义 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;
}
}

格式化程序类看起来像这样:
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();
}

}

关于winforms - 在 DataGridView 中使用自定义格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com