datagridview更新行到csv文件

时间:2017-09-01 19:30:11

标签: c# 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,A ;; 4; 5 已更改设备 A 总计:1次......

修改下一行:

  

1; A ;; 4 B C; 5 已更改设备 B C 总变化:2次...

使用数据库可以轻松更新数据,但我没有安装sql server,所以这个选项对我来说不是我想的..

我的目标是跟踪设备输入/输入,如果您有解决方案,请分享。

1 个答案:

答案 0 :(得分:1)

没有使用SQL服务器,可能是like this could help的东西? LiteDB您已拥有LiteDB来托管您的数据,并在您需要时将其导出为CSV。使用CSV文件通常意味着每次有更新时你都会重写整个文件......这很慢而且很麻烦。我建议您使用CSV将数据从A点传输到B点,但不要维护数据。

另外,如果您真的想坚持使用CSV,请查看以前称为JET驱动程序的Microsoft Ace OLEDB驱动程序。我用它来查询CSV文件,但我从来没有用它来更新...所以你的里程可能会有所不同。

如果不使用实际的DataBase或数据库驱动程序,您必须使用StreamReader和StreamWriter。使用StreamReader读取文件,使用StreamWriter编写新文件。在您的StreanReader中。这意味着您在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 });

抱歉......我的变量命名约定有时会爆炸......