将数据从ArrayList传递到ListView

时间:2017-06-29 00:00:32

标签: c# listview arraylist windows-forms-designer

我是C#编程的新手,我有一个Windows Form项目,我试图用ArrayList和ListView做一个小CRUD,但是..问题是将数据从ArrayList传递给ListView我会显示问题!

在这个类中我初始化Form并将一些属性设置为ListView,并执行read()方法taht将从ArrayList读取数据并传递给ListView!

namespace EmployeeCompany
{
    public partial class Main : Form
    {

        ArrayList list = new ArrayList();

        public Main()
        {
            InitializeComponent();            

            //ListView Properties
            lstvPerson.View = View.Details;
            lstvPerson.FullRowSelect = true;

            //Construct Columns
            lstvPerson.Columns.Add("Name", 150);
            lstvPerson.Columns.Add("Position", 150);
            lstvPerson.Columns.Add("Team", 150);
            read();
        }

        //-------Problem
        private void read()
        {
            ListViewItem item = new ListViewItem();
            item.Text = list.ToString();
            lstvPerson.Items.Add(item);            
        }

        private void btnRegister_Click(object sender, EventArgs e)
        {
            Person person = new Person();
            person.name = this.txtName.Text;
            person.position = this.txtPosition.Text;
            person.team = this.txtTeam.Text;
            list.Add(person);
        }

    }
}

在输出中:

Name   |   Position  |   Team |
-------------------------------
System.Collection.ArrayList   |
                              |
                              |
                              |
                              |

有人可以向我解释为什么我会收到这个错误,并举一些关于良好实践的例子吗?

1 个答案:

答案 0 :(得分:1)

首先,我建议不要使用ArrayList。对于此问题,您应该使用List。它是强类型的,可以让您更轻松地访问每个人的属性。只需改变

ArrayList list = new ArrayList();

var list = new List<Person>();

对于ListView ......如果我没记错的话,Text的{​​{1}}是最左边的列。要访问其他列,您需要使用ListViewItem

此外,您无法将整个列表分配给一个项目。您应该将列表中的一个项目分配给ListView中的一个项目。

所以而不是

SubItems

尝试

private void read()
{
    ListViewItem item = new ListViewItem();
    item.Text = list.ToString();
    lstvPerson.Items.Add(item);            
}