Существует ли Атрибут, который я могу использовать на свойстве, чтобы сказать DataGridView, как отформатировать столбец?

Я получил ошибки NoClassDefFound, когда не экспортировал класс на вкладке «Порядок и экспорт» в пути сборки Java моего проекта. Обязательно поставьте галочку на вкладке «Заказ и экспорт» всех зависимостей, которые вы добавляете в путь сборки проекта. См. Предупреждение затмения: XXXXXXXXXXX.jar не будет экспортирован или опубликован. Время выполнения ClassNotFoundExceptions может привести к .

8
задан Community 23 May 2017 в 12:13
поделиться

2 ответа

Я знаю, что это не идеально, но вы можете добавить еще одно свойство под названием 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"); }
  }
}
5
ответ дан 5 December 2019 в 17:39
поделиться

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);
    }
}
5
ответ дан 5 December 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: