Home > .NET > Cannot convert value of parameter ‘value’ from ‘System.String’ to ‘System.DateTime’

Cannot convert value of parameter ‘value’ from ‘System.String’ to ‘System.DateTime’

Trong khi làm việc với objectdatasource và GridView, FB đã gặp phải thông báo lỗi sau

Cannot convert value of parameter ‘value’ from ‘System.String’ to ‘System.DateTime’

Lỗi này sinh ra khi update hoặc insert 1 bảng dữ liệu có trường datetime trong khi trên view tớ hiển thị dữ liệu datetime dạng dd/MM/yyyy. Mình đã xử lý lại sự ItemUpdating và ItemInserting như sau:

protected void fvStaff_ItemInserting(object sender, FormViewInsertEventArgs e)
    {
        if (e.Values["DateOfBirth"] != null)
        {
            DateTime currentDate = DateTime.MinValue;
            if (DateTime.TryParse(e.Values["DateOfBirth"].ToString(), 
                    out currentDate))
                e.Values["DateOfBirth"] = currentDate.ToString();
        }
    }
    protected void fvStaff_ItemUpdating(object sender, FormViewUpdateEventArgs e)
    {
        // change dd/MM/yyyy to MM/dd/yyyy (suitable with system format)
        if (e.NewValues["DateOfBirth"] != null)
        {
            DateTime currentDate = DateTime.MinValue;
            if (DateTime.TryParse(e.NewValues["DateOfBirth"].ToString(), 
                   out currentDate))
                e.NewValues["DateOfBirth"] = currentDate.ToString();
        }
    }

Nhưng vẫn gặp lỗi đó, sau 1 lúc trao đổi với google thì tớ viết lại như  sau:

using System.Globalization;
....
IFormatProvider culture = new CultureInfo("vi-VN", true);
if (DateTime.TryParse(e.NewValues["DateOfBirth"].ToString(), culture, 
              DateTimeStyles.NoCurrentDateDefault, out currentDate))
         e.NewValues["DateOfBirth"] = currentDate.ToString();

Thế rồi mọi việc ổn thỏa, như vậy tức là ta cần phải cho hàm TryParse biết string ta cần convert sang DateTime đang ở định dạng nào (ở đây là dd/MM/yyyy và 1 trong các culture sử dụng dạng đó là vi-vn).

Chỉ thế thôi, ngớ ngẩn nhỉ!!!!

Reference: http://programming.top54u.com/post/ASP-Net-2-0-C-DateTime-IFormatProvider-Using-ParseExact.aspx

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: