2012-01-23 19 views
5

Mam datagridview databound. W nim mam kolumnę, która ma wartości NULL i 1-12. Jak mogę w czasie wykonywania zrobić datagridview włączyć 1 stycznia i wyświetlić go w komórce? A NULL na inny predefiniowany ciąg?Databound DataGridView Format komórki Int do miesiąca Konwersja nazwy

Próbowałem spojrzeć na format komórki, zmieniłem ją na niestandardową, a następnie wstawiłem "MMM", ale nie zadziałało i wyświetliło "MMM" w rzeczywistej komórce.

Proszę o pomoc.

EDYTOWANIE: Jego winformy C# 4.0, pole jest powiązane z polem Int z encji w EF. I nie ma potrzeby wrażliwości kulturowej, angielski jest w porządku.

EDYCJA: Próbowałem {0: MMM} to nie działa, po prostu wyświetlane {X: MMM} w komórce, gdzie X jest int.

Niektóre screeny:

format

result

+0

Czy potrzebujesz tego jako wielojęzycznego/wrażliwego na kulturę? Plus to jest obecnie związane z "int?" rodzaj? – ChrisBD

+0

Czy to są formularze wygranych? lub ASP.NET? – atoMerz

Odpowiedz

1

Najprostszym sposobem będzie o to, aby utworzyć oddzielną właściwość do databinding, taka jak DisplayMonth, która zawiera logikę, którą chcesz, a następnie powiąż komórkę z tą właściwością. Czy korzystasz z klas generowanych przez EF? Jeśli tak, możesz dodać tę właściwość do klasy częściowej w celu rozszerzenia tej wygenerowanej przez EF.

To będzie wyglądać następująco:

public string DisplayMonth 
{ 
    get { return ConvertToString(this.Date); //TODO: create ConvertToString method } 
    set { return this.Date = ConvertFromString() //TODO: create ConvertFromString method ; } 
} 

Jak już wspomniano, można również użyć zdarzenia CellFormatting jednak trzeba ponownie wdrożyć go wszędzie ten przedmiot jest używany w sieci.

4

Jeśli WinForms spróbować tego:

Zastosowanie Column.DefaultCellStyle.Format własność lub ustawić go w designer.

Ten post powinien wyjaśnić wszelkie wątpliwości:

Customize format of DateTime string in WPF and WinForm data binding


PROBLEM: String formatowanie maski będzie działać tylko z wartości DateTime. Masz int iw tym przypadku myślę, że trzeba napisać funkcję konwertera ...

Zaznacz to:

DataGridView.CellFormatting Event

+0

Tak Próbowałem ustawić go na {0: MMM} w właściwości Format w projektancie, po prostu wyświetlał {X: MMM} w każdej komórce, gdzie X = int. – sprocket12

+0

Wiem o zdarzeniu Formatowanie komórek, miałem nadzieję na prostszy sposób, ponieważ musiałem to wyświetlić w wielu sieciach. Ale myślę, że nie mam opcji. Myślałem także, że moje własne formatowanie byłoby mniej wydajne niż wbudowane w formatowanie przez samą siatkę. – sprocket12

+0

Nie możesz zwrócić wartości DateTime w tej kolumnie? Byłoby bardzo proste, gdyby było to możliwe ... :) W ten sposób można użyć maski formatu zgodnie z oczekiwaniami, pokazując tylko nazwę miesiąca. –