2009-05-14 9 views
0

Ich muss den DateTimeMode einiger Spalten in einem bereits gefüllten Dataset ändern. (Ich will nicht, es zu ändern, bevor es aufgefüllt wird, wie es in mehreren Verfahren through die Anwendung die Änderungen bedeuten würde.)Ändern des DateTimeMode einiger Spalten in einer Datentabelle, nachdem sie mit Daten gefüllt wurde

Hier ist die Anw I (für eine einzelne Spalte) verwende:

copy.Tables[0].Columns["DateColName"].DateTimeMode = DataSetDateTime.Utc; 

Es wird jedoch ein Fehler ausgegeben, dass Sie den DateTimeMode nicht ändern können, wenn das Dataset Daten enthält. Also die Lösung, die ich denke, erstellt einen Klon des Datasets, ändert den DateTimeMode der erforderlichen Spalten und lädt dann die Daten zurück.

DataSet copy = dsdata.Clone(); 
copy.Tables[0].Columns["DateColName"].DateTimeMode = DataSetDateTime.Utc; 
copy.Load(dsdata.CreateDataReader(), LoadOption.OverwriteChanges, "TableName"); 

Gibt es einen besseren Weg, dies zu tun?

Antwort

0

Ich lief gerade in dieses Problem auch. Der DateTimeMode kann nicht mehr geändert werden, sobald der Datensatz gefüllt ist. Die einzige Lösung, die ich finden könnte, ist, die Spalte mit dem richtigen DateTimeMode neu zu erstellen.

Dieser Code könnte helfen, Sie müssen nicht das gesamte Dataset klonen, sondern nur die Spalte entfernen, ändern und wieder in die Tabelle einfügen.

Sie müssen nur vorsichtig sein, wenn Sie die Zeilenwerte zurück in die Spalte kopieren, um den RowState beizubehalten.

1

versuchen dies, prost

private void SetUtcDateTime() 
    { 
     var ds = new DataSet { Locale = CultureInfo.InvariantCulture }; 

     foreach (DataTable source in DataSet.Tables) 
     { 
      bool containsDate = false; 
      var target = source.Clone(); 

      foreach (DataColumn col in target.Columns) 
      { 
       if (col.DataType == System.Type.GetType("System.DateTime")) 
       { 
        col.DateTimeMode = DataSetDateTime.Utc; 
        containsDate = true; 
       } 
      } 

      if (containsDate) 
      { 
       foreach (DataRow row in source.Rows) 
        target.ImportRow(row); 
       ds.Tables.Add(target); 
      } 
      else 
      { 
       ds.Tables.Add(source.Copy()); 
      } 
     } 
     DataSet.Tables.Clear(); 
     DataSet = ds; 
    } 

wo 'DataSet' ein öffentliches Eigentum auf dem Objekt ist.

Verwandte Themen