-1

これを行う簡単な方法があるかどうかを知りたい。私は、DataSetを持つ簡単なWindowsフォームアプリケーションを作成し、いくつかの列(ID、タイトル、説明、開発者、年)の中にテーブル(ゲーム)を作成しました。Visual Studio 2015 Express(Windowsフォームアプリケーション)でデータセットを入力しますか?

次に、このDataSetを参照してListBoxオブジェクトを作成し、(Games.Title)を表示する列を選択しました。 ListBoxの横には、他の列の値を表示するラベルがいくつかあります。

今、私はずっとコーディングなしのVisual Studio内のDataSetを埋めることができるかどうかを知りたい - あなたはMS AccessでAccessデータベースを編集する場合のように...

現在、私が次のコードでDataSetを埋めますアプリケーションの起動:

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); 

しかし、私は、この表の200行を追加したい場合は、これは非常にコード強烈です... と私はSQLデータベースまたはAccessデータベースなどの外部ソースを使用する必要はありません。 データ、コードおよびアプリケーションは、コンパイル後に1つのEXE内にすべて存在する必要があります。

DataSetテーブルに値を入力する簡単な方法はありますか?

ありがとうございました!

+0

[Rows.Add](https://docs.microsoft.com/en-us/dotnet)を使用することができます。/framework/data/adonet/dataset-datatable-dataview/add-data-to-a-datatable)を使用して1つのステートメントに行の値を追加することはできますが、200行であってもこれは面倒な作業です。データベースを必要としない場合は、単純なテキストファイルを使用できます。 –

答えて

0

Embedded Resourceとしてアプリケーションに埋め込むJSONテキストファイルとしてファイルを保存することもできます。例えば、以下のようにサンプルJSONファイルを使用して

{ 
    "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 
     } 
    ] 
} 

次のビルドアクションを変更することによって、あなたのソリューションにこれを埋め込むことができます(プロパティのペイン)Embedded Resourceに、これはあなたにあなたにJSONデータファイルを埋め込みますアセンブリ出力。 Embedded Resource Build Action

次に、JSON.Netを使用してデータをデシリアライズしてDatasetにすることができます。

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; 
} 

上記の方法はかなり簡単です。まず、JSONデータ(ファイル名はdata.json)をアセンブリから読み込みます。ファイルへのパスはYourNameSpace.<FileName>

である必要があります。JsonConvert.DeserializeObject<DataSet>()を使用して、JSONテキストをDatasetオブジェクトに変換して返します。結果には、アプリケーションで使用できるData(JSONファイルのルートノード)という1つのテーブルが含まれます。

これで、データを追加するためにJSONファイルに追加するだけで済みます。今度はこのファイルをアセンブリ(exe)にインクルードし、追加ファイルを持たずに、アプリケーションに埋め込まれたデータを書き込むことはできません。

ただし、書き込みアクセスが必要な場合は、ファイルがアプリケーションパスに存在するかどうかを(起動時に)検出できます。存在しない場合は、デフォルトのデータファイルを読み取り、その内容を以下のような出力ファイルに書き込むことができます。我々は、ファイルが現在のアプリケーションディレクトリに存在するかどうかを最初にチェックすることによってDatasetをロードする上記のコード例で

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); 
} 

。存在しない場合は、FileStreamを使用して、埋め込みリソースからディスクに内容を効果的にコピーしています。

次に、File.ReadAllText()を呼び出して、ディスクから内容を読み取り、それをpreviousメソッドを使用してデータセットに変換することができます。

変更をデータセットに保存する方法があります。リソースがアプリケーションに埋め込まれると、アセンブリ内のバージョンを変更することはできませんが、ディスク上のファイルを上書きすることができます。

0

XMLファイル内のすべてのデータを入れて、(dataSet.ReadXmlを呼び出すことができます)

スキーマといくつかの助けをしたい場合は、あなたのデータセットとdataSet.writeXml(へのデータの数行を置きます)、それをテキストエディタで開いて、どのように構造化して拡張する必要があるかを知る。

関連する問題