2012-01-23 31 views
5

Tôi có một datagridview databound. Trong đó tôi có một cột có giá trị NULL và 1-12. Làm thế nào tôi có thể tại thời gian chạy làm cho datagridview biến 1 vào tháng Giêng và hiển thị nó trong tế bào? Và NULL vào một chuỗi được xác định trước?Databound DataGridView Định dạng ô Int to Month Name Conversion

Tôi đã thử xem định dạng ô, thay đổi thành tùy chỉnh, sau đó đặt trong "MMM" nhưng nó không hoạt động và hiển thị "MMM" trong ô thực tế.

Vui lòng trợ giúp.

EDIT: Winforms C# 4.0, trường này được liên kết với trường Int từ một thực thể trong EF. Và không cần cho văn hóa nhạy cảm, tiếng Anh là tốt.

EDIT: Tôi đã thử {0: MMM} nó không hoạt động, chỉ hiển thị {X: MMM} trong ô trong đó X là int.

Một số ảnh chụp màn hình:

format

result

+0

Bạn có cần điều này là đa ngôn ngữ/văn hóa nhạy cảm không? Plus là điều này hiện đang bị ràng buộc với một 'int?' kiểu? – ChrisBD

+0

Đây có phải là biểu mẫu giành chiến thắng không? hoặc ASP.NET? – atoMerz

Trả lời

1

Cách đơn giản nhất đi về việc này là để tạo ra một riêng thuộc tính cho databinding, chẳng hạn như DisplayMonth chứa logic bạn muốn, sau đó liên kết ô với thuộc tính đó thay thế. Bạn có đang sử dụng các lớp do EF tạo ra không? Nếu vậy, bạn có thể thêm thuộc tính này vào một lớp từng phần để mở rộng thuộc tính được tạo ra bởi EF.

Nó sẽ giống như thế:

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

Như đã đề cập, bạn cũng có thể sử dụng các sự kiện CellFormatting, tuy nhiên bạn sẽ cần phải tái thực hiện nó ở khắp mọi nơi đối tượng này được sử dụng trong một mạng lưới.

4

Nếu WinForms thử điều này:

Sử dụng Column.DefaultCellStyle.Format tài sản

hoặc thiết lập nó trong designer.

bài này nên làm rõ bất kỳ nghi ngờ gì nữa:

Customize format of DateTime string in WPF and WinForm data binding


VẤN ĐỀ: chuỗi định dạng mặt nạ sẽ chỉ làm việc với các giá trị DateTime. Bạn có int và trong trường hợp này, tôi nghĩ rằng bạn sẽ phải viết một hàm chuyển đổi ...

Kiểm tra này:

DataGridView.CellFormatting Event

+0

Có, tôi đã thử đặt nó thành {0: MMM} trong thuộc tính Định dạng trong trình thiết kế, nó chỉ hiển thị {X: MMM} trong mọi ô, trong đó X = int. – sprocket12

+0

Tôi biết về sự kiện Định dạng Ô, tôi đã hy vọng một cách đơn giản hơn vì tôi phải hiển thị điều này trong nhiều lưới. Nhưng tôi đoán tôi không có lựa chọn. Ngoài ra tôi đã suy nghĩ định dạng của riêng tôi sẽ ít hiệu quả hơn so với xây dựng trong định dạng của lưới điện chính nó. – sprocket12

+0

Bạn không thể trả về giá trị DateTime trong cột này? Nó sẽ thực sự đơn giản nếu điều đó là có thể ... :) Bằng cách này bạn có thể sử dụng mặt nạ định dạng như mong đợi chỉ hiển thị tên tháng. –