2012-01-23 24 views
5

我有一個databound datagridview。在它裏面我有一個有NULL值和1-12的列。我如何在運行時使datagridview將1變爲1月並將其顯示在單元格中?和NULL到另一個預定義的字符串?Databound DataGridView單元格格式Int到月份名稱轉換

我試過看單元格格式,將它改爲自定義,然後放入「MMM」,但它沒有工作,並在實際單元格中顯示「MMM」。

請幫忙。

編輯:它的winforms c#4.0,該字段綁定到EF中的實體的Int字段。沒有文化敏感的需要,英文很好。

編輯:我試過{0:MMM}它沒有工作,只是在X是int的單元格中顯示{X:MMM}。

一些截圖:

format

result

+0

你需要這是多種語言/文化敏感嗎?另外,這是目前綁定到'int?'類型? – ChrisBD

+0

這是贏的形式嗎?或ASP.NET? – atoMerz

回答

1

的要對這個簡單的方法是創建一個單獨的數據綁定屬性,例如DisplayMonth,其中包含所需的邏輯,然後將該單元綁定到該屬性。你使用EF生成的類嗎?如果是這樣,您可以將此屬性添加到部分類以擴展由EF生成的類。

它看起來是這樣的:

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

前面已經提到的,你也可以使用CellFormatting事件,但是你需要到處重新實現它這個物體在網格中使用。

4

如果的WinForms試試這個:

使用Column.DefaultCellStyle.Format屬性或將其設置在designer

這個職位應該澄清任何的疑問:

Customize format of DateTime string in WPF and WinForm data binding


問題:字符串格式化口罩只能與DateTime值工作。你有int和在這種情況下,我認爲你必須寫一個轉換器功能...

檢查:

DataGridView.CellFormatting Event

+0

是的,我嘗試在設計器的Format屬性中將其設置爲{0:MMM},它僅在每個單元格中顯示{X:MMM},其中X = int。 – sprocket12

+0

我知道單元格格式事件,我希望更簡單的方法,因爲我必須在很多網格中顯示它。但我想我沒有選擇。此外,我認爲我自己的格式化效率低於網格本身格式化的效率。 – sprocket12

+0

您不能在此列中返回DateTime值嗎?如果可能的話,它會非常簡單... :)這樣,您可以按照預期使用格式掩碼,只顯示月份名稱。 –