2013-04-22 186 views
1

我使用C#导入CSV文件导入我的应用程序导入CSV文件导入使用C#

列表目前我有一个1场CSV文件。它工作的很好,但现在我想添加一个3字段的CSV文件到同一个应用程序中。

一旦数据被存储到列表中,我将它绑定到我的DataGridView

这里是培训相关的代码,我已经写了。如果您发现任何不属于我的问题但可能成为问题的问题,请随时发出警告。我一直在寻找学习和改进我的代码。

BindingList<StringValue> data = new BindingList<StringValue>(); 

    private void importExcelFile() 
    { 
     TextFieldParser parser = new TextFieldParser(fileName);    
     parser.TextFieldType = FieldType.Delimited; 
     parser.SetDelimiters(","); 
     while (!parser.EndOfData) 
     { 
      //Processing row 
      string[] fields = parser.ReadFields(); 
      foreach (string field in fields) 
      { 
       StringValue s = new StringValue(field); 
       // Issue is here. It adds it to a single dimension array. What can I do to make it multi-dimension? 
       data.Add(s); 
      } 
     } 
     parser.Close(); 
    } 

    private void OnBackgroundWorkerDoWork(object sender, DoWorkEventArgs e) 
    {    
     importExcelFile();    
    } 

    private void OnBackgroundWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     dataGridView1.DataSource = data; 
     dataGridView1.Columns[1].Name = "URL"; 
     dataGridView1.Columns[1].HeaderText = "URL"; 
     dataGridView1.Columns[1].Width = 300; 
     dataGridView1.Columns[1].ReadOnly = true; 
     dataGridView1.AutoResizeColumns();    
     toolStripStatusLabel1.Text = dataGridView1.RowCount.ToString() + " Number Of Websites"; 
    } 

class StringValue 
{ 
    string day, time, url; 
    public StringValue(string s) 
    { 
     _value = s; 
    } 

    public StringValue(string[] s) 
    { 
     day = s[0]; 
     time = s[1]; 
     url = s[2]; 
    } 

    public string Value { get { return _value; } set { _value = value; } } 
    string _value; 
} 

我想我应该修改我的StringValue类来保存我是从我的CSV文件导入多个领域。我不知道如何修改的价值一部分,当我把它绑定到我的dataGridView

谢谢您的输入和帮助/

回答

1

为什么不探微把CSV到像一个DataTable返回我需要的数据所以?

private DataTable GetDataTableFromCsv(string path) 
    { 
     DataTable dataTable = new DataTable(); 
     String[] csv = File.ReadAllLines(path); 

     foreach (string csvrow in csv) 
     { 
      var fields = csvrow.Split(','); // csv delimiter 
      var row = dataTable.NewRow(); 

      row.ItemArray = fields; 
      dataTable.Rows.Add(row); 
     } 

     return dataTable; 
    } 

之后,将数据表导入您的datagridview。

+2

你当你解析CSV要非常小心。你认为没有引用文字。如果他们有5,6,“这也是文本”,343.33。你的字符串也会被拆分。不是你想要的。编写你自己的解析器或使用一个。这是一个体面的。 http://blogs.msdn.com/b/jmstall/archive/2012/03/24/opensource-csv-reader-on-nuget.aspx – 2013-04-22 17:10:27

1

在您的实体(StringValue)中,您可以根据需要添加尽可能多的属性,包含尽可能多的值。

可以通过将DataPropertyName列设置为绑定属性的名称来绑定dataGridView的每一列。

例如,你的实体有两个属性:

class MyValues 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

你加的这个集合yuur数据收集,它绑定到你的网格。

网格可以配置路由为:

dataGridView1.Columns[0].Name = "FirstName"; 
dataGridView1.Columns[0].HeaderText = "FirstName"; 
dataGridView1.Columns[0].DataPropertyName = "FirstName"; 
dataGridView1.Columns[1].Name = "LastName"; 
dataGridView1.Columns[1].HeaderText = "LastName"; 
dataGridView1.Columns[1].DataPropertyName = "LastName";