2017-09-01 14 views
0

CsvファイルとdatagridviewをインベントリアプリケーションのC#プロジェクトで使用していますが、行をCSVファイルに更新しようとしています。datagridview行をcsvファイルに更新

私は新しい単語とユーザー編集場合、行現在の単語を更新する必要がありますが、ここに私の問題は、私は現在の単語や新しい単語を保存し、擬似コード例で、合計を取得する必要がある:

foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       if(row in column is modified) 
        update specific row with comma to current file and load it... 
      } 

CSVファイルは、次のようになり 現在です:

1; 2 ;; 4、5

更新:

1; 2、;; 4; 5変更装置全1時間...

修飾

次の行:

1; A12;C; 5変更されたデバイスBC総変更:2時間...データベースと

は、それがデータを更新するのは簡単ですが、私は、SQL Serverがインストールされていないので、このオプションはしていません私にとっては..と思う..

私の目標は、デバイスの出入りを追跡するためです。ソリューションがあればそれを共有してください。

答えて

1

SQLサーバーを使用していない、おそらく何かlike this could helpLiteDB LiteDBでデータをホストし、必要に応じていつでもCSVにエクスポートできます。 CSVファイルを使って作業することは、通常、更新があるたびにファイル全体を書き直すことを意味します。これは遅くて面倒です。ポイントAからポイントBへデータを転送するのにCSVを使用することをお勧めしますが、データを維持することは推奨しません。

また、CSVに固執したい場合は、以前はJETドライバとして知られていたMicrosoft Ace OLEDBドライバを見てください。私はCSVファイルを照会するためにそれを使用しますが、私はそれを更新するために使用したことはありません...あなたの走行距離は異なる場合があります。

実際のDataBaseまたはデータベースドライバを使用するには、StreamWriterとともにStreamReaderを使用する必要があります。 StreamReaderでファイルを読み取り、StreamWriterで新しいファイルを書き込みます。あなたのStreanReaderで。これは、更新する正しいLineを見つけるためのコードをStreamReaderに持たせることを意味します。

私はLiteDBとやりとりするために作成したクラスです。それほど強力ではありませんが、当時私が必要としていたこととまったく同じでした。プラットフォーム上でホストされている多数の製品に変更を加えなければならず、これを使用して進捗状況を追跡しました。

using System; 
using LiteDB; 

namespace FixProductsProperty 
{ 

    public enum ListAction 
    { 
     Add = 0, 
     Remove, 
     Update, 
     Disable, 
     Enable 
    } 

    class DbInteractions 
    { 
     public static readonly string dbFilename = "MyDatabaseName.db"; 
     public static readonly string dbItemsTableName = "MyTableName"; 
     public void ToDataBase(ListAction incomingAction, TrackingDbEntry dbEntry = null) 
     { 

      if (dbEntry == null) 
      { 
       Exception ex = new Exception("dbEntry can not be null"); 
       throw ex; 
      } 


      // Open database (or create if not exits) 
      using (var db = new LiteDatabase(dbFilename)) 
      { 

       var backupListInDB = db.GetCollection<TrackingDbEntry>(dbItemsTableName); 

       //ovverride action if needed 
       if (incomingAction == ListAction.Add) 
       { 
        var tempone = backupListInDB.FindOne(p => p.ProductID == dbEntry.ProductID); 
        if (backupListInDB.FindOne(p => p.ProductID == dbEntry.ProductID) != null) 
        { 
         //the record already exists 
         incomingAction = ListAction.Update; 
         //IOException ex = new IOException("Err: Duplicate. " + dbEntry.ProductID + " is already in the database."); 
         //throw ex; 
        } 
        else 
        { 
         //the record does not already exist 
         incomingAction = ListAction.Add; 
        } 
       } 

       switch (incomingAction) 
       { 
        case ListAction.Add: 
         backupListInDB.Insert(dbEntry); 
         break; 
        case ListAction.Remove: 
         //backupListInDB.Delete(p => p.FileOrFolderPath == backupItem.FileOrFolderPath); 
         if (dbEntry.ProductID != 0) 
         { 
          backupListInDB.Delete(dbEntry.ProductID); 
         } 
         break; 
        case ListAction.Update: 
         if (dbEntry.ProductID != 0) 
         { 
          backupListInDB.Update(dbEntry.ProductID, dbEntry); 
         } 
         break; 
        case ListAction.Disable: 
         break; 
        case ListAction.Enable: 
         break; 
        default: 
         break; 
       } 

       backupListInDB.EnsureIndex(p => p.ProductID); 
       // Use Linq to query documents 
       //var results = backupListInDB.Find(x => x.Name.StartsWith("Jo")); 
      } 
     } 

    } 
} 

私はこのようにそれを使用します。

DbInteractions yeah = new DbInteractions(); 
yeah.ToDataBase(ListAction.Add, new TrackingDbEntry { ProductID = dataBoundItem.ProductID, StoreID = dataBoundItem.StoreID, ChangeStatus = true }); 

申し訳ありませんが...私の変数の命名規則は時々...お返事のための

+0

感謝を吹く、私はドキュメントをチェックしましょう、あなたが使用しています前にlitedb?あなたが例を持っていれば私はLiteDBを私のアプリに実装するのを喜んで了承してくれるでしょう。 – Kate

+0

私は以前LiteDBを使っていました。 [自分のウェブサイト](http://www.litedb.org/)の一番上にはコードサンプルが一番下にあります。それが私が始めたところです。 –

+0

@Kate、私の投稿を自分のLiteDBクラスのコピー/ペーストで更新しました。 –

関連する問題