-1

Ich möchte wissen, ob es eine einfache Möglichkeit gibt, dies zu tun. Ich habe eine einfache Windows Form Application mit einem DataSet erstellt und eine Tabelle (Games) mit ein paar Spalten (ID, Title, Description, Developer, Year) erstellt.füllen Sie ein DataSet in Visual Studio 2015 Express (Windows Forms Application)?

Dann habe ich ein ListBox-Objekt mit Bezug auf dieses DataSet erstellt und eine Spalte zum Anzeigen ausgewählt (Games.Title). Dann gibt es ein paar Labels neben der ListBox, um die Werte der anderen Spalten anzuzeigen.

Jetzt möchte ich wissen, ob ich das DataSet in Visual Studio ohne viel Codierung füllen kann - wie wenn Sie eine Access-Datenbank in MS Access bearbeiten ...

Derzeit i das DataSet mit dem folgenden Code an die füllen Start der Anwendung:

DataRow CrNewLine = dataSet1.Tables["Games"].NewRow(); 
CrNewLine["Title"] = "The Title of the Game"; 
CrNewLine["Description"] = "This is the Description. Farewell."; 
CrNewLine["Developer"] = "Warner Interactive Entertainment Ltd."; 
CrNewLine["Year"] = "1996"; 
dataSet1.Tables["Games"].Rows.Add(CrNewLine); 

Aber das ist sehr Code intensiv, wenn ich 200 Zeilen in dieser Tabelle hinzufügen will ... und ich möchte nicht über eine externe Quelle wie SQL-Datenbank oder Access-Datenbank verwenden. Die Daten, der Code und die Anwendung sollten nach dem Kompilieren alle in einer EXE sein.

So ist eine einfachere Möglichkeit, eine DataSet-Tabelle mit Werten zu füllen?

Danke für jede Antwort!

+0

Sie können [Rows.Add] (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/datensatz-datatable-dataview/adding-data-to-a-datatable) um die Werte für eine Zeile in einer Anweisung hinzuzufügen, aber selbst mit 200 Zeilen ist dies eine lästige Aufgabe. Wenn Sie keine Datenbank möchten, können Sie eine einfache Textdatei verwenden. –

Antwort

0

Eine Option wäre, die Datei als JSON Textdatei in Ihre Anwendung als Embedded Resource eingebettet zu speichern.

eine Probe Json-Datei verwenden, wie unten:

{ 
    "Data": [ 
     { 
      "Title": "Title 1", 
      "Description": "Description 1", 
      "Developer": "Developer 1", 
      "Year": 1996 
     }, 
     { 
      "Title": "Title 2", 
      "Description": "Description 2", 
      "Developer": "Developer 2", 
      "Year": 1997 
     }, 

     { 
      "Title": "Title 3", 
      "Description": "Description 3", 
      "Developer": "Developer 3", 
      "Year": 1998 
     } 
    ] 
} 

Weiter Sie diese in Ihre Lösung Aktion, indem die Build einbetten können (im Eigenschaftsfenster) zu Embedded Resource dieses Sie JSON-Daten-Datei einbetten in Ihre Baugruppenausgabe. Embedded Resource Build Action

Als nächstes können wir JSON.Net verwenden, um die Daten in eine Dataset zu deserialisieren.

public static DataSet LoadData() 
{ 
    var asm = typeof(Program).Assembly; 
    var jsonText = ""; 
    using(var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.data.json")) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      jsonText = reader.ReadToEnd(); 
     } 
    } 
    DataSet dataSet = null; 
    try 
    { 
     dataSet = JsonConvert.DeserializeObject<DataSet>(jsonText); 
    } 
    catch 
    { 
    } 
    return dataSet; 
} 

Die obige Methode ist ziemlich geradlinig. Zuerst lesen wir die JSON-Daten (Dateiname ist data.json) aus der Baugruppe. Beachten Sie, dass der Pfad zu der Datei YourNameSpace.<FileName>

sein sollte. Als nächstes verwenden wir die JsonConvert.DeserializeObject<DataSet>(), um den JSON-Text in ein Dataset-Objekt zurück zu konvertieren. Das Ergebnis enthält eine einzelne Tabelle mit dem Namen Data (der Stammknoten unserer JSON-Datei), die Sie dann in Ihrer Anwendung verwenden können.

Jetzt müssen Sie nur der JSON-Datei hinzufügen, um weitere Daten hinzuzufügen. Jetzt, da Sie diese Datei in Ihre Assembly (exe) einfügen wollen und keine zusätzliche Datei haben, können Sie keine Daten in die Assembly schreiben (wie in der Anwendung eingebettet).

Wenn Sie jedoch Schreibzugriff benötigen, könnten Sie (beim Start) feststellen, ob die Datei im Anwendungspfad vorhanden ist. Wenn es nicht vorhanden ist, können Sie die Standarddatendatei lesen und dann den Inhalt in eine Ausgabedatei wie unten schreiben.

public static DataSet LoadDataSet() 
{ 
    var asm = typeof(Program).Assembly; 

    string filePath = Path.GetDirectoryName(asm.CodeBase).ToLowerInvariant().Replace(@"file:\", ""); 
    filePath = Path.Combine(filePath, "data.json"); 
    string jsonText = null; 
    if (!File.Exists(filePath)) 
    { 
     using (var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.data.json")) 
     { 
      using (var fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.ReadWrite)) 
      { 
       stream.CopyTo(fs); 
      } 
     } 
    } 
    else 
     jsonText = File.ReadAllText(filePath); 

    DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(jsonText); 
    return dataSet; 
} 

public static void SaveDataSet(DataSet dataSet) 
{ 
    var asm = typeof(Program).Assembly; 
    string filePath = Path.GetDirectoryName(asm.CodeBase).ToLowerInvariant().Replace(@"file:\", ""); 
    filePath = Path.Combine(filePath, "data.json"); 

    string jsonText = JsonConvert.SerializeObject(dataSet, Formatting.Indented); 
    File.WriteAllText(filePath, jsonText); 
} 

Im Codebeispiel oben wir die Dataset, indem man zuerst überprüfen, werden geladen, wenn die Datei in dem aktuellen Anwendungsverzeichnis existiert.Wenn es nicht existiert, kopieren wir den Inhalt effektiv von der eingebetteten Ressource auf die Platte unter Verwendung eines .

Dann können wir einfach File.ReadAllText() aufrufen, um den Inhalt von der Festplatte zu lesen und dann mit der Methode vorher in einen Datensatz zu konvertieren.

Wir haben dann eine Methode, um die Änderungen im Dataset zu speichern. Da die Ressource nun in die Anwendung eingebettet ist, können wir die Version in der Assembly nicht ändern, jedoch können wir die Datei auf der Festplatte einfach überschreiben.

0

Sie können alle Daten in einer XML-Datei setzen und rufen DataSet.ReadXML()

Wenn Sie Hilfe mit dem Schema wollen, setzen Sie ein paar Zeilen von Daten in Ihren dataSet und DataSet.WriteXML(), dann öffnen Sie es in einem Texteditor und erhalten Sie eine Idee, wie es strukturiert und erweitert werden muss.

Verwandte Themen