Listview添加没有出现的项目C#

时间:2014-01-04 15:20:52

标签: c# winforms listview

我正在开发一个小程序,作为我的A Level Computing课程的一部分,旨在跟踪订单。它是使用Windows窗体用C#编写的。

我遇到一个问题,我输入新订单的所有信息然后按OK,它应该用信息更新ListView。我有4列的ListView in Detail视图,但没有任何东西被添加到ListView。应该将项目添加到ListView的代码部分正在执行,并且不会引发任何错误或导致程序崩溃但没有添加任何内容。它很奇怪,因为我使用的是与我在我的小原型模拟中使用的完全相同的方法但由于某种原因现在它无法正常工作。

我在这里或互联网上发现的所有内容似乎都表明它与ListView的View模式存在问题,我尝试修改此属性无济于事。

为什么这部分代码拒绝向ListView添加任何内容?

            //Create an array to store the data to be added to the listbox
            string[] orderDetails = { Convert.ToString(id + 1), rNameBox.Text, dateBox.Value.ToString(), orderBox.Text };

            //DEBUGGING
            Console.WriteLine(orderDetails[0]);
            Console.WriteLine(orderDetails[1]);
            Console.WriteLine(orderDetails[2]);
            Console.WriteLine(orderDetails[3]);
            //END DEBUGGING

            //Add the order info to the ListView item on the main form
            var listViewItem = new ListViewItem(orderDetails);
            ths.listView1.Items.Add(listViewItem);

如果您需要更多信息,请说明。如果这是错误的格式或者这是我第一次来这里,请道歉。

1 个答案:

答案 0 :(得分:0)

你的问题是你的ListViewItem包含一个字符串数组,它没有用来显示它的方法。

你应该做什么(有很多方法可以做到这一点,但这里有一个)是创建一个类,OrderDetail,带有Id,一个Name,一个Date等等。给它一个ToString()方法(公共覆盖字符串ToString()),它返回你想要显示的内容,例如:

public override string ToString()
{
    return this.Name;
}

创建OrderDetail的实例并设置其属性。创建ListViewItem,为其提供OrderDetail实例并添加到ListView。重复所需数量的OrderDetail实例。

干杯 -

补充:有效的代码:

    int id = 12;
    string rNameBoxText = "rName";
    DateTime dateBoxValue = DateTime.Now;
    string orderBoxText = "order";
    string[] orderDetails = { Convert.ToString(id + 1), rNameBoxText, dateBoxValue.ToString(), orderBoxText };

    //DEBUGGING
    Console.WriteLine(orderDetails[0]);
    Console.WriteLine(orderDetails[1]);
    Console.WriteLine(orderDetails[2]);
    Console.WriteLine(orderDetails[3]);
    //END DEBUGGING

    this.listView1.Columns.Clear();
    this.listView1.Columns.Add("Id");
    this.listView1.Columns.Add("rName");
    this.listView1.Columns.Add("Date");
    this.listView1.Columns.Add("Order");
    this.listView1.View = View.Details;
    //Add the order info to the ListView item on the main form
    var listViewItem = new ListViewItem(orderDetails);
    this.listView1.Items.Add(listViewItem);