【问题标题】:how to solve this error: System.FormatException: 'The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.'如何解决此错误:System.FormatException:'字符串未被识别为有效的 DateTime。有一个从索引 0 开始的未知单词。
【发布时间】:2017-05-06 16:21:25
【问题描述】:

我有一个 Windows 窗体应用程序 C#,当我单击一行上的编辑时,datagridview 中的日期必须进入 datetimepicker,但是当该日期的日期以 0 开头时,我收到此错误:

System.FormatException: '字符串未被识别为有效的 DateTime。有一个从索引 0 开始的未知单词。 我的代码是:

int currentRow = int.Parse(e.RowIndex.ToString());
string ddn = dgv_patients[9, currentRow].Value.ToString();
dateTimePicker_ddn.Text = ddn;

字符串 ddn 看起来像 02-May-95,一天从 0 开始,当我尝试将 ddn 放入 datetimepicker 时会导致问题。

我尝试了很多次解决这个问题,但没有解决办法!

看图片:

c# app code and error

【问题讨论】:

  • 我认为错误信息比字符串本身的格式更重要。 “有一个从索引 0 开始的未知单词”不是正常的不兼容日期格式错误消息。您能否在将 dnn 分配给 DatePicker 之前查看它,以显示索引 0 处的内容并在此处共享该信息?
  • 兄弟,谢谢你是对的!我在datagridview的末尾添加了一列按钮,该列更改了datagridview中的孔列索引,因此索引0从这个新列开始,1是第一列...因为出现错误在我的日期时间选择器上,因为列的另一个值将进入日期时间选择器而不是日期!
  • 我添加了我的评论作为答案。

标签: c# datetime datagridview datetimepicker windows-applications


【解决方案1】:

错误信息比字符串本身的格式更重要。

"有一个从索引 0 开始的未知单词"

不是正常的不兼容日期格式错误消息。在将 dnn 分配给 DatePicker 之前查看它,以显示索引 0 处的内容并确认您正在分配字符串。

【讨论】:

    【解决方案2】:

    您应该查看CustomFormat 属性并验证它是否适合您尝试设置的文本。

    来自 MSDN - DateTimePicker.Text Property:

    此属性返回的字符串等效于应用了适当格式或自定义格式的 Value 属性。例如,如果 Value 属性设置为 06/01/2001 12:00:00 AM,而 CustomFormat 属性设置为“dddd, MMMM dd, yyyy”,则 Text 属性值为“Friday, June 01, 2001” .
    设置此属性时,字符串必须可转换为 DateTime 类的实例。可以定义导致无法转换为有效 DateTime 值的字符串的自定义格式。因此,如果从 Text 属性返回的字符串传回 Text 属性,则可能会导致错误。如果字符串无法转换为日期/时间值,则 DateTime 类将引发 FormatException。

    如果 DataGrid 中的列已经是DateTime,则无需使用字符串,只需将其分配给选取器即可:

    dateTimePicker_ddn.Value = (DateTime)dgv_patients[9, currentRow].Value;
    

    根据 cmets 的另一个选项是使用 DateTime.ParseExact
    例如:

    DateTime dt = DateTime.ParseExact("02-May-95", "dd-MMM-yy", CultureInfo.InvariantCulture);
    

    或者在你的情况下是这样的:

    dateTimePicker_ddn.Value = DateTime.ParseExact(
        dgv_patients[9, currentRow].Value.ToString(),
        "dd-MMM-yy",
        CultureInfo.InvariantCulture);
    

    【讨论】:

    • 不是日期,不是日期时间!它看起来像这样:02-May-95
    • C# 中没有 Date 类型。因此,要么您的列是 DateTime,您只需在选择器中设置 Value,或者如果您需要使用字符串,请尊重 CustomFormat。
    • 另一种选择是使用DateTime.ParseExact
    • 在我的数据库中,我有一列日期类型。如何使用 DateTime.ParseExact?
    • 无论如何,从你所描述的情况来看,我非常肯定这已经足够了:dateTimePicker_ddn.Value = (DateTime)dgv_patients[9, currentRow].Value;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多