如何将List <string [] =“”>中的数据放入dataGridView </string>

时间:2013-10-19 21:49:51

标签: c# .net winforms list datagridview

尝试将List中的一些数据放到dataGridView中,但是有一些问题。

目前有方法,返回我要求的清单 - 请看下面的图片

    public List<string[]> ReadFromFileBooks()
    {
        List<string> myIdCollection = new List<string>();
        List<string[]> resultColl = new List<string[]>();
        if (chooise == "all")
        {
            if (File.Exists(filePath))
            {
                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {                        
                    StreamReader sr = new StreamReader(fs);
                    string[] line = sr.ReadToEnd().Split(new string[] { Environment.NewLine },
                        StringSplitOptions.RemoveEmptyEntries);
                    foreach (string l in line)
                    {
                        string[] result = l.Split(',');
                        foreach (string element in result)
                        {
                            myIdCollection.Add(element);
                        }
                        resultColl.Add(new string[] { myIdCollection[0], myIdCollection[1], myIdCollection[2], myIdCollection[3] });
                        myIdCollection.Clear();
                    }
                    sr.Close();
                    return resultColl;
                }
            }
     ....

这将返回给我需要的数据(如数组中的列表)。 enter image description here

在此之后,尝试将其移动到dataGridView,它已经有4个带有名称的列(因为我确定,不需要4个列) - 请参见下面的图片

enter image description here

尝试使用下一个代码将数据放入dataGridView

    private void radioButtonViewAll_CheckedChanged(object sender, EventArgs e)
    {
        TxtLibrary myList = new TxtLibrary(filePathBooks);
        myList.chooise = "all";
        //myList.ReadFromFileBooks();
        DataTable table = new DataTable();
        foreach (var array in myList.ReadFromFileBooks())
        {
            table.Rows.Add(array);
        }
        dataGridViewLibrary.DataSource = table;
    }

但结果得到了错误 - “需要更多行存在于dataGridVIew中”,但是符合我所看到的(上图)行q(ty)的q-ty等于List中数组元素的q-ty(4 )。

尝试通过添加额外的临时变量来检查结果 - 但没关系 - 请参见下面的图片

enter image description here

我哪里错了?也许我没有以正确的方式使用dataGridView?

修改

文件示例(简单csv)

11111,作者,姓名,类别

11341,作者1,姓名1,类别1

2 个答案:

答案 0 :(得分:2)

在添加行之前,您需要首先添加列到您的DataTable

private void radioButtonViewAll_CheckedChanged(object sender, EventArgs e)
{
    TxtLibrary myList = new TxtLibrary(filePathBooks);
    myList.chooise = "all";
    DataTable table = new DataTable();
    //add columns first
    table.Columns.Add("ID");
    table.Columns.Add("Author");
    table.Columns.Add("Caption");
    table.Columns.Add("Categories");
    //then add rows
    foreach (var array in myList.ReadFromFileBooks()) {
        table.Rows.Add(array);
    }
    dataGridViewLibrary.DataSource = table;
}

答案 1 :(得分:1)

我觉得你的代码太复杂了。简而言之,如果要从文件中查看表中的所有数据,可以执行此操作

if (!System.IO.File.Exists("file.txt"))
            return;
        dgvDataGridView.ColumnCount = 4;
        dgvDataGridView.Columns[0].HeaderCell.Value = "ID";
        dgvDataGridView.Columns[1].HeaderCell.Value = "Author";
        dgvDataGridView.Columns[2].HeaderCell.Value = "Caption";
        dgvDataGridView.Columns[3].HeaderCell.Value = "Categories";
        using (System.IO.StreamReader sr = new System.IO.StreamReader("file.txt"))
            while (sr.Peek() > -1)
                dgvDataGridView.Rows.Add(sr.ReadLine().Split(','));