我有一个包含一些漂亮的一般属性的模型:C#MVC使用CSV文件
public class ProductItem
{
public int ID { get; set; }
public string Description { get; set; }
public char Item { get; set; }
public decimal Price { get; set; }
public string ImagePath { get; set; }
public string Barcode { get; set; }
}
我用下面这个模型从一个CSV文件中填充的实例:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(System.Int32));
dt.Columns.Add("Description", typeof(System.String));
dt.Columns.Add("Item", typeof(System.Char));
dt.Columns.Add("Price", typeof(System.Decimal));
dt.Columns.Add("ImagePath", typeof(System.String));
dt.Columns.Add("Barcode", typeof(System.String));
String[] csv = File.ReadAllLines(csvPath);
foreach (string csvrow in csv)
{
var fields = csvrow.Split(',');
var row = dt.NewRow();
row.ItemArray = fields;
dt.Rows.Add(row);
}
return dt;
这返回一个Datatable,然后用于以下函数以获取该列表:
private List<ProductItem> GetAllProductsCSV()
{
var filePath = Server.MapPath(@"~/CSV/products.csv");
var products = new ProductsCSV();
DataTable results = products.GetProductsFromCSV(filePath);
List<ProductItem> productItems = (from DataRow dr in results.Rows
select new ProductItem()
{
ID = Convert.ToInt32(dr["ID"]),
Description = dr["Description"].ToString(),
Item = Convert.ToChar(dr["Item"]),
Price = Convert.ToDecimal(dr["Price"]),
ImagePath = dr["ImagePath"].ToString(),
Barcode = dr["Barcode"].ToString(),
}).ToList();
return productItems;
}
首先,这是所有s对于我认为应该容易得多的事情,我的工作似乎有些复杂......我为自己做了很多工作,而不是我需要的吗?
其次,当我对模型实例进行更改并需要将其写回到CSV文件时,我正在逆转此过程中的一些问题。我知道我需要重新写入整个回来(因为我已经读过,你不能只更新CSV中的一行)......但如果有人有一些如何最好地实现这一点的例子将不胜感激。
这样的情况不清楚为什么你加载一个数据表与你的CSV而不是直接'列表' –
Steve
对不起,刚刚意识到我已经把一半那里的故事...会添加一些(可能更多)令人费解的代码... – CJH
这不是一个好方法。 CSV格式[比这更复杂](http://www.secretgeek.net/csv_trouble); Split(',')'和Join(',')'只会解析一小部分CSV文件。有[许多](https://stackoverflow.com/questions/9642055/)测试,工作,调试CSV分析器准备好你放入你的应用程序。 –