0

尝试将一些数据从 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;
                }
            }
     ....

这以所需的形式返回给我所需的数据(如数组中的列表)。 在此处输入图像描述

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

在此处输入图像描述

尝试使用下一个代码将数据放入 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 of rows (4) 等于 q-ty of arrays element in List (4)。

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

在此处输入图像描述

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

编辑

文件示例(简单 csv)

11111,作者,姓名,类别

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

4

2 回答 2

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;
}
于 2013-10-20T06:29:49.663 回答
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(','));
于 2013-10-19T22:20:12.117 回答