【问题标题】:Pass datas from ArrayList to ListView将数据从 ArrayList 传递到 ListView
【发布时间】:2017-12-02 12:24:05
【问题描述】:

我是 C# 编程的新手,我有一个 Windows 窗体项目,我尝试使用 ArrayList 和 ListView 进行一些 CRUD,但是.. 问题是将数据从 ArrayList 传递到 ListView 我会显示问题!

在这个类中,我初始化Form并为ListView设置一些属性,并执行read()方法,它将从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   |
                              |
                              |
                              |
                              |

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

【问题讨论】:

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


    【解决方案1】:

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

    ArrayList list = new ArrayList();
    

    var list = new List<Person>();
    

    至于 ListView...如果我没记错的话,ListViewItemText 是最左边的列。要访问其他列,您需要使用SubItems

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

    所以不是

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

    试试

    private void read()
    {
        foreach(Person p in list)
        {
            ListViewItem item = new ListViewItem();
            item.Text = p.Name;
            item.SubItems.Add(p.Position);
            item.SubItems.Add(p.Team);
            lstvPerson.Items.Add(item);            
        }
    }
    

    【讨论】:

    • 非常感谢您的回答,但它仍然无法正常工作...... ListView 保持为空,但不会出错!我有一个问题...为什么我不能使用 List&lt;Person&gt; list = new List&lt;Person&gt; 而不是 var list = new List&lt;Person&gt;(); 因为当我使用 var list = new List&lt;Person&gt;(); 时出现错误 - “var my only appear on script code”
    • var 关键字只是意味着您希望编译器推断类型,因此var list = new List&lt;Person&gt;() 应该与List&lt;Person&gt; list = new List&lt;Person&gt;() 做完全相同的事情。但是现在我正在查看您的代码,我注意到 list 是一个成员变量,而 var 不允许在那里。
    • 是的...... ListView 保持为 Null,这会是什么?
    • 我不明白你的问题。
    • 对不起...我的意思是,错误的原因可能是什么?
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2018-05-28
    • 2018-06-13
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多