如何在未绑定数据网格视图列中显示CSV文件数据

时间:2019-04-07 10:31:23

标签: c# winforms csv datagridview

在Windows窗体上,我有两个未绑定的数据网格视图列,每个列都有自己的标题,我尝试读取数据表中的csv文件并将其绑定到网格。

只有我不知道所涉及的逻辑。我不知道如何将数据绑定到2个数据网格视图列。关于如何将csv数据绑定到网格视图的示例很多,但是它们处理的是从文件内部读取的标头,而不是未绑定的标头,但这是与asp有关的。 Display data on grid view column programmatically

这是csv文件中的数据。

Address,76 Douglas St Wakecorn
Property name,Wakecorn University
Building,C Block
Room,C2.18

这是读取它的类的代码。

    public class Setting
    {
        private DataTable _dt { get; set; }

        public DataTable ProcessSettingFileCMD(string filePath)
        {
            if (_dt == null)
            {
                populateControlWithCSVData(filePath);             
            }
        }

        private void populateControlWithCSVData(string filePath)
        {
            _dt  = new DataTable();            
            string[] lines = File.ReadAllLines(filePath);

            if(lines.Length > 0)
            {
                for(int row = 1; row < lines.Length; row++)
                {
                    string[] dataWords = lines[row].Split(',');
                    DataRow dr = _dt.NewRow();

                    foreach (string word in lines)
                    {
                        dr[word] = dataWords[row++];                        
                    }
                    _dt.Rows.Add(dr);
                }
            }
        }
    }

这是表格

private void mnuOpen_Click(object sender, EventArgs e)
{
    openFD.InitialDirectory = "C:\\";
    openFD.ShowDialog(); 
    _dt = _objSetting.ProcessSettingFileCMD(openFD.FileName);

    if (_dt.Rows.Count > 0)
    {
        gvSettings.DataSource = _dt;
    }
}

返回的错误位于dr[word] = dataWords[row++];

  

System.ArgumentException:'列'Address,76 Douglas St Wakecorn'   不属于表。

1 个答案:

答案 0 :(得分:0)

根据提供的指导和选项,我取出了设计器中创建的列,而是在读取CSV文件时将其实例化。

我还使用了CsvFileReader子类将其绑定到字符串列表,然后绑定到数据表。很有用! http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c

这是重写的代码。

设置表格。

   [
      {
        "name": "Beginner",
        "skills": [
          {
            "name": "Skill 2",
            "checked": true
          }
        ]
      },
      {
        "name": "Intermediate",
        "skills": [
          {
            "name": "Skill 1",
            "checked": true
          }
        ]
      }
    ]

这又是设置类。

public partial class frmSettings : Form
{

        protected string FileName;
        protected bool Modified;
        Setting _objSetting = new Setting();
        OpenFileDialog openFD = new OpenFileDialog();
        DataTable _dt = new DataTable();

        public frmSettings()
        {            
            InitializeComponent();
        }

        private void mnuOpen_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;
            try
            { 
                openFD.Title = "Open a CSV File";
                if (SaveIfModified())
                {
                    if (openFD.ShowDialog(this) == DialogResult.OK)
                    {
                        _dt = _objSetting.ProcessSettingFileCMD(openFD.FileName);
                        if (_dt.Rows.Count > 0)
                        {
                            gvSettings.DataSource = _dt;
                        }
                    }
                }
                FileName = openFD.FileName;
                Modified = false;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(String.Format("Error reading from {0}.\r\n\r\n{1}", FileName, ex.Message));
            }
            finally
            {
                Cursor = Cursors.Default;
            }            
        }
    }