Frage

Ich versuche, all Datetime-Wert in einer Datatable in Strings zu konvertieren. Hier ist die Methode, die ich benutze:

private static void ConvertDateTimesToStrings(DataTable dataTable)
{
    if (dataTable == null)
    {
        return;
    }

    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++ )
    {
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            DateTime dateTime;
            try
            {
                dateTime = (DateTime)dataTable.Rows[rowIndex][i];
            }
            catch (InvalidCastException)
            {
                continue;
            }
            dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");
        }
    }
}

Nachdem diese Linie funktioniert:

dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");

Ich überprüfe den Wert von DataTable.Rows [rowIndex] [i] und sehen, es ist immer noch ein Datum- und kein String. Warum passiert und wie kann ich dieses Problem lösen?

Edit: Ich versuche, dies zu tun, weil ich ein api kämpfte und ich habe leider nicht die Wahl, welche Komponente verwenden

.
War es hilfreich?

Lösung

Es kann festgestellt, dass der Spaltendatentyp Datum Zeit ist und Neuverpackung der Werte in Datetime, wenn Sie den Wert dort speichern zurück.

Versuchen Sie, diese ... Erstellen Sie eine neue Spalte auf der Datentabelle als TypeOf (String) und den String-Wert in dieser Spalte speichern. Wenn alle Werte kopiert wurden, wird das Datum Zeitspalte fallen.

Andere Tipps

Das wird einfach nicht funktionieren, weil Sie nicht den darunter liegenden Datentyp geändert haben.

Sie haben eine Datatable mit einer Spalte, den Datentyp Datetime hat.

Sie können einen String zuweisen, aber es wird konvertieren Datetime zurück.

Warum wollen Sie es auf eine formatierte Zeichenfolge ändern möchten? Können Sie nicht nur zu formatieren, wenn Sie es angezeigt werden müssen, und als Datetime-Griff, bis Sie es angezeigt haben?

Update: es auch besser, wenn Sie den Typ der Spalte überprüfen, bevor Sie zu konvertieren versuchen, kann es viel schneller:

if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}

Es wird nicht funktionieren beacuse der Datentyp des Spalts noch Datetime ist, und es wird die Zeichenfolge zurück in Datetime konvertieren. Ich würde vorschlagen, um das Datum Zeichenfolge zu formatieren, wenn Sie Ihre API-Nachricht zu generieren. Wenn Sie noch eine String-Spalte für Datetime-Werte erzeugen müssen

foreach (DataColumn column in dataTable.Columns) {
  if (column.DataType == typeof(DateTime)) {
    dataTable.Columns.Add(column.ColumnName + "_string", typeof(string));
  }
}

foreach (DataRow row in dataTable.Rows) {
   foreach (DataColumn column in dataTable.Columns) {
     if (column.DataType == typeof(DateTime)) {
       row[column.ColumnName + "_string"] = row[column.ColumnName].ToString("dd.MM.yyyy hh:mm:ss");
     }
   }
}

Dann können Sie alle Datetime-Spalten entfernen oder eine dataTable.Select () verwenden, nur die Spalten, die Sie benötigen. PS:. Ich habe den Code nicht testen, es ist an Ihnen,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top