c # - Sådan løses denne fejl: System.FormatException: 'Strengen blev ikke genkendt som en gyldig DateTime. Der er et ukendt ord, der starter ved indeks 0. '

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en Windows-formular ansøgning C #, når jeg klikker på redigere på en række, skal datoen i datagridviewet gå ind i datatimepickeren, men når dagen for denne dato begynder med 0, får jeg denne fejl:


System.FormatException: 'Strengen blev ikke genkendt som en gyldig DateTime. Der er et ukendt ord, der starter ved indeks 0.'
min kode er:


int currentRow = int.Parse(e.RowIndex.ToString());
string ddn = dgv\_patients[9, currentRow].Value.ToString();
dateTimePicker\_ddn.Text = ddn;


Strengen ddn ser ud som den 02-maj-95, dagen begynder med 0, og det forårsager et problem, når jeg forsøger at sætte ddn i datetimepickeren.


Jeg forsøgte mange gange at løse dette problem, og ingen løsning virker!


Se billederne:


c # app
kode og fejl [10] [11]

Bedste reference


Fejlmeddelelsen er vigtigere end formatet af selve strengen.



  'Der er et ukendt ord, der starter ved indeks 0'



er ikke en normal inkompatibel datoformatfejlmeddelelse. Se på dnn, før det er tildelt DatePicker, for at vise, hvad der er på indeks 0 og bekræfte, at du tildeler en streng.

Andre referencer 1


Du skal se på egenskaben CustomFormat og kontrollere, at den passer til den tekst, du forsøger at indstille.


Fra MSDN - DateTimePicker.Text Property: [12]



  Strengen, der returneres af denne egenskab, svarer til værdien Egenskab med den relevante formatering eller brugerdefineret formatering, der er anvendt. Hvis værdiendommen f.eks. Er sat til 06/01/2001 12:00:00, mens egenskaben CustomFormat er indstillet til 'dddd, MMMM dd, yyyy', er tekstegenskabens værdi 'Fredag ​​den 1. juni 2001' .

  Når du indstiller denne egenskab, skal strengen være konvertibel til en forekomst af DateTime-klassen. Det er muligt at definere et brugerdefineret format, der resulterer i en streng, der ikke kan konverteres til en gyldig DateTime-værdi. På grund af dette kan strengen, der returneres fra tekstegenskaben, forårsage en fejl, hvis den sendes tilbage til tekstegenskaben. Hvis strengen ikke kan konverteres til en dato/tid værdi, kaster DateTime-klassen en FormatException.



Hvis kolonnen i DataGrid allerede er en DateTime så er der ingen grund til at bruge strenge, skal du blot tildele den til plukkeren:


dateTimePicker\_ddn.Value = (DateTime)dgv\_patients[9, currentRow].Value;





En anden mulighed ifølge kommentarerne er at bruge DateTime.ParseExact

For eksempel:


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


Eller i dit tilfælde præcis:


dateTimePicker\_ddn.Value = DateTime.ParseExact(
    dgv\_patients[9, currentRow].Value.ToString(),
    "dd-MMM-yy",
    CultureInfo.InvariantCulture);