Blo*_*ard 8 .net c# attributes datagridview properties
关于这个问题的一点点,如果我有这个课:
private class MyClass {
[DisplayName("Foo/Bar")]
public string FooBar { get; private set; }
public decimal Baz { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
我想List<MyClass>在a DataGridView(显示自动生成的列)中显示一个最简单的方法,将Baz列显示格式化为货币?
是否有一个我可以使用的属性,就像我正在使用的那样DisplayName,或者在创建列后我是否必须弄乱它们?
我知道它不完美,但你可以添加另一个名为CurrencyBaz的属性,它基本上会返回格式化的Baz,然后将其绑定到网格而不是真正的Baz.
所以这样的事情.
private class MyClass {
[DisplayName("Foo/Bar")]
public string FooBar { get; private set; }
[Browsable(False)]
public decimal Baz { get; private set; }
[DisplayName("Baz")]
public CurrencyBaz
{
get { return string.Format(Baz, "C2"); }
}
}
Run Code Online (Sandbox Code Playgroud)
TypeConverterAttribute - 就像是:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Windows.Forms;
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form { Controls = {
new DataGridView {
Dock = DockStyle.Fill,
DataSource = new List<MyClass> {
new MyClass { FooBar = "abc", Baz = 123.45M},
new MyClass { FooBar = "def", Baz = 678.90M}
}
}
}});
}
}
class MyClass
{
[DisplayName("Foo/Bar")]
public string FooBar { get; set; }
[TypeConverter(typeof(CurrencyConverter))]
public decimal Baz { get; set; }
}
class CurrencyConverter : DecimalConverter
{
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
string s = value as string;
if (s != null) return decimal.Parse(s, NumberStyles.Currency, culture);
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string))
{
return ((decimal)value).ToString("C2", culture);
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |