如何从sql中提取日期时间并将其绑定到datetimePicker

时间:2017-06-04 08:18:51

标签: c# sql winforms datetimepicker

我已经将日期从datetimepicker保存到我的Windows窗体应用程序中的sql格式(dd-MM-yyyy)。要编辑日期,我想首先获取已保存的日期并在datetimepicker控件中显示。就像28-03-2000保存在db中一样,datetimepicker应该显示相同的日期,并且应该理解格式dd-MM-yyyy。我想要做的代码如下

birthday_search.Text = Convert.ToDateTime(reader["Birthday"]).ToString("dd-MM-yyyy");

birthday_search是datetimepicker的名称。这会产生错误"字符串未被识别为有效的日期时间"因为它本身选择的格式是MM-dd-yyyy,结果证明这是错误的。

5 个答案:

答案 0 :(得分:2)

试试这个:

将datetimepicker的属性格式更改为自定义 然后添加以下代码:

birthday_search.CustomFormat = "dd-MM-yyyy";

birthday_search.Value = Convert.ToDateTime(reader["Birthday"]).ToString());

答案 1 :(得分:1)

问题是生日字段的类型 你说你把它作为NVARCHAR列。出于多种原因,这是错误的。

首先,数据库无法对该字段进行适当的搜索。例如:是" 28-12-2000"之前" 14-01-2001"?如果你把它看作一个字符串NO,因为1在2之前,但是如果你把它看作Date,那么YES。

然后,在加载时,您将无法将该值转换回日期时间变量。转换将假定发生转换的机器的CultureInfo。根据输入,这可以正常工作或不工作。例如,在我的机器上,字符串" 04-06-2017"将在6月4日转换,但在文化信息设置为MM-dd-yyyy的机器上,相同的字符串将被解析为4月6日。

因此,您只需将该字段更改为日期时间类型,将值存储为DateTime变量并使用

将其读回
birthday_search.Value = Convert.ToDateTime(reader["Birthday"]);

birthday_search.Value = (DateTime)reader["Birthday"];

此处不涉及格式化。 datetime类型的字段被分配给DateTime类型的属性。显示此值的格式是DateTimePicker的Format和CustomFormat的作业。当然,这段代码并没有考虑NULL值的可能性。

答案 2 :(得分:0)

尝试设置datetimepicker的格式,如下所示:

birthday_search.Format = DateTimePickerFormat.Custom;

现在您想要的格式:

birthday_search.CustomFormat = "dd-MM-yyyy";

答案 3 :(得分:0)

dd-MM-yyyy默认情况下不是ToDateTime函数的预期格式。请改用Convert.ToDateTime (String, IFormatProvider)重载。或使用ParceExact获取DateTime值:

DateTime MyDateTime = DateTime.ParseExact(reader["Birthday"], "dd-MM-yyyy", null);

但是在你的情况下,转换是不必要的,因为你可以使用Text属性的字符串值。所以它足以使用

birthday_search.Text = reader["Birthday"];

答案 4 :(得分:0)

尝试一下

Me.birthday_search.DataBindings.Add("Text", TableName, "Birthday")