2009-10-31 29 views
6

Tôi phải xây dựng một DropDownList với các ngày trong 7 ngày qua. Tôi muốn DropDownList hiển thị ngày là "DD/MM/YYYY". Vì vậy, tôi đã tạo danh sách các ngày:Trong ASP.NET, làm thế nào tôi có thể ép định dạng ngày tháng trong một DropDownList thành "DD/MM/YYYY"?

DateTime date = DateTime.Now; 
List<DateTime> dates = new List<DateTime>(); 

for (int i = 0; i < HISTORY_LENGTH; i++) 
{ 
    dates.Add(date.AddDays(-i)); 
} 

DropDownList.DataSource = dates; 
DropDownList.DataBind(); 

Tôi thêm ngày của tôi làm Ngày giờ, không phải là chuỗi. Tôi nghĩ rằng đó là phương thức ToString() của đối tượng DateTime được gọi để tạo ra văn bản có thể nhìn thấy trong DropDownList của tôi. Theo mặc định, đó là ngày và giờ. Kết quả là:

[0]: {16/07/2008 11:08:27}

[1]: {15/07/2008 11:08:27}

[2]: {14/07/2008 11:08:27}

[3]: {13/07/2008 11:08:27}

[4]: ​​{12/07/2008 11:08:27}

[5]: {11/07/2008 11:08:27}

[6]: {10/07/2008 11:08:27}

Làm thế nào tôi có thể buộc các định dạng "DD/MM/YYYY"?

+0

Đây có phải là câu hỏi asp.net không? Câu hỏi ban đầu không chỉ định. –

+0

sry. Có trong asp.net –

+0

Tôi nghĩ rằng bạn cần phải xem xét @Andrew Hare câu trả lời như được chấp nhận .. – Lijo

Trả lời

1

Tôi sẽ bọc DateTime trong đối tượng khác và ghi đè ToString() vì đó là danh sách thả xuống hiển thị.

class MyDateTime { 
    public MyDateTime(DateTime dt) { 
     _dt = dt; 
    } 
    public override String ToString() { 
     return _dt.ToString("dd/MM/yyyy"); 
    } 
    private DateTime _dt; 
} 

Ưu điểm chính của việc này là bạn có thể lưu trữ thông tin khác ngoài chỉ một chuỗi để tham chiếu các đối tượng hoặc dữ liệu khác. Nếu chỉ có một chuỗi đồng bằng là đủ thì nó là quá mức cần thiết.

Nếu có dấu '/' là quan trọng đối với bạn bằng tất cả ngôn ngữ (ngôn ngữ) thì bạn phải cập nhật ngôn ngữ đó nếu không bạn có thể kết thúc bằng một ký tự khác ở một số địa điểm.

Xem http://www.color-of-code.de/index.php?option=com_content&view=article&id=58:c-format-strings&catid=38:programming&Itemid=66 để biết một số ví dụ (danh sách gian lận của tôi với gotchas mà tôi gặp phải).

Mã này đã được sửa đổi một chút:

DateTime date = DateTime.Now; 
List<MyDateTime> dates = new List<MyDateTime>(); 

for (int i = 0; i < HISTORY_LENGTH; i++) 
{ 
    dates.Add(new MyDateTime(date.AddDays(-i))); 
} 

DropDownList.DataSource = dates; 
DropDownList.DataBind(); 
+1

Sry đó là rất cao để làm cho một điều đơn giản ... – Kovu

+0

Một chút cao có thể nhưng một khi anh ta muốn kết hợp những thứ khác với ngày, có thể chứng minh là hữu ích. – jdehaan

+0

cao? haha, tôi sẽ gọi nó về phía trước để có thể sử dụng lại. –

2

Format các Ngày trong danh sách như vậy trước khi bạn liên kết các dữ liệu để kiểm soát.

1
List<string> dates = new List<string>(HISTORY_LENGTH - 1); 

    for (int i = 0; i < HISTORY_LENGTH; i++) 
    { 
     dates.Add(DateTime.Today.ToString("dd/MM/yyyy")); 
    } 

    DropDownList.DataSource = dates; 
    DropDownList.DataBind(); 
0

Chỉ cần tự thêm các mục vào bộ sưu tập DropDownList.Items thay vì dựa vào DataBind():

DateTime date = DateTime.Now; 

for (int i = 0; i < HISTORY_LENGTH; i++) 
{ 
    DropDownList.Items.Add(new ListItem(date.AddDays(-i).ToString("dd/MM/yyyy"), date.AddDays(-i))) 
} 
23

Tất cả bạn cần làm là thiết lập DropDownList.DataTextFormatString - sau đó khi databinding kiểm soát của bạn sẽ áp dụng đúng định dạng:

<asp:DropDownList 
    id="yourList" 
    runat="server" 
    dataTextFormatString="{0:dd/MM/yyyy}"/> 
4

Thay vì định dạng nguồn dữ liệu bạn cũng có thể thiết lập định dạng của ngày như:

DropDownList.DataTextFormatString = "{0:dd/MM/yyyy}"; 
0

Nếu đây là điều bạn phải làm trên toàn bộ ứng dụng, bạn cần phải xem đối tượng CultureInfo.

Bạn nhận được các đối tượng CultureInfo hiện bằng cách gọi

var culture = CultureInfo.CurrentCulture; 

Đối tượng CultureInfo có một tính chất gọi là DateTimeFormat mà lần lượt có một tính chất gọi ShortDatePattern mà bạn nên đặt như vậy ...

culture.DateTimeFormatInfo.ShortDatePattern = "dd/MM/yyyy"; 

Giờ đây, bạn có thể sử dụng bất kỳ nơi nào bằng cách định dạng chuỗi như vậy ...

String.Format("{d}", someDateTime); 
+0

Điều này không hoạt động khi bạn nhận được một ngoại lệ nói rằng trường hợp chỉ đọc. Xem http://stackoverflow.com/questions/7413077/how-to-change-the-data-format-for-the-current-culture-so-that-it-applies-to-the hoặc http: // stackoverflow .com/questions/10332064/currentculture-datetimeformat-longtimepattern-read-only hiển thị bạn cần sao chép hoặc xây dựng một đối tượng văn hóa mới. –

Các vấn đề liên quan