DateTimePicker.MinDate 问题

问题描述 投票:0回答:1

我想在

DateTimePicker
中的
VS2015
上设置最小和最大日期。我想将最小日期设置为数据库中的值,将最大日期设置为
DateTime.Now
。我有以下代码:

SQLiteCommand cmdForShopRegDate = new SQLiteCommand(@"select Date from [ShopRegistration]", con);
SQLiteDataAdapter AdapterShopRegDate = new SQLiteDataAdapter(cmdForShopRegDate);
DataTable TableShopRegDate = new DataTable();
AdapterShopRegDate.Fill(TableShopRegDate);
this.dateTimePickerStartReport.MaxDate = System.DateTime.Now.Date;
this.dateTimePickerStartReport.MinDate = Convert.ToDateTime(TableShopRegDate.Rows[0][0].ToString());

我收到以下错误:

“18-Jul-28 12:00:00 AM”的值对于“MinDate”无效。 “MinDate”必须小于 MaxDate。

c# sqlite datetime
1个回答
0
投票

您遇到的问题与数据格式有关。您正在解析

18-Jul-28
的值。问题是,这会解析为
7/18/2028
,它肯定大于
8/2/2018
。要解决此问题,您需要使用以下格式进行解析:

yy-MMM-dd

除此之外,你的代码也可以简化(除非你绝对需要你的

DataTable
)。
SqlLiteCommand.ExecuteScalar
返回结果集中第一行的第一列并忽略所有其他数据。

using (SqlLiteConnection conn = new SqlLiteConnection("put your connection string here")) {
    using (SqlLiteCommand cmd = new SqlLiteCommand("select Date from [ShopRegistration]", conn) {
        conn.Open();
        dateTimePicker.MinDate = DateTime.ParseExact((string)cmd.ExecuteScalar(),
                                                     "yy-MMM-dd",
                                                     CultureInfo.InvariantCulture).Date;
    }
}

dateTimePicker.MaxDate = DateTime.Now.Date;

您需要将

using System.Globalization;
添加到您的用途中才能访问
CultureInfo

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.