在C#中将列添加到listview

时间:2012-09-30 09:05:58

标签: c# listview arraylist

我在SearchFlyClass中有一个Arraylist GetFly()

        ...
        public ArrayList GetFly(int tip, string country)
        {
            ...
                    var list = new ArrayList();
                    var reader = command.ExecuteReader();
                    if (reader.HasRows)
                    {
                        ...
                        while (reader.Read())
                        {
                            decimal nr_zbor = reader.GetDecimal(cod_zbor);
                            string aeroport = reader.GetString(nume_aeroport);
                            string companie = reader.GetString(nume_companie);
                            list.Add(nr_zbor);
                            list.Add(companie);
                            list.Add(aeroport);
                        }
                    }
            ...

我希望在列表视图中列出Form1.cs列表[zbor(colzbor),airport(colAirport),company(colCompany)],但我现在不知道如何

private SearchFlyClass searchFly = new SearchFlyClass();
private ArrayList fly = new ArrayList();
...
private void ShowResultFlySearch(int direction, string country)
        {
                fly = searchFly.GetFly(direction, country);
                for (int count = 0; count < fly.Count; count++)
                {
                    string zbor = fly[0].ToString();
                    string companie = fly[1].ToString();
                    string aeroport = fly[2].ToString();
                    ListViewItem searchlist = new ListViewItem();
                    searchlist.Items.Add(new ListViewItem(elem));

                }
        }
有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

首先,您必须将ListView放入View模式详细信息,您可以使用以下代码(也可以在设计器中设置View属性):

ListView listView = new ListView();
listView.View = View.Details;

然后你必须为listView分配列(也可以在设计器中完成):

listView.Columns.Add("zbor");
listView.Columns.Add("airport");
listView.Columns.Add("company");

在此之后,您必须通过修改函数将其他列分配给ListViewItem子项:

private void ShowResultFlySearch(int direction, string country)
{
    fly = searchFly.GetFly(direction, country);

    for (int count = 0; count < fly.Count; count++)
    {
        string zbor = fly[0].ToString();
        string companie = fly[1].ToString();
        string aeroport = fly[2].ToString();

        ListViewItem listViewItem = new ListViewItem(zbor);
        listViewItem.SubItems.Add(airport);
        listViewItem.SubItems.Add(companie);

        listView.Items.Add (listViewItem);
    }
}

该函数假定它在Form1.cs中并且您将listView变量实例化为ListView类型的类变量。 C#和面向对象编程的基础知识。

答案 1 :(得分:0)

此代码存在许多问题。首先,您是否有任何理由使用ArrayList而不是通用集合类型?例如。 List<T>

其次,我将创建一个类型来存储实体的一个实例的所有相关数据,而不是将实体的列值放入无类型集合中。

第三,您没有在count循环中的任何位置引用for - 可能是因为查询返回单个实体,因此for循环是多余的,因为您知道为单个实体返回的项目数。您还使用了似乎尚未定义的变量elem

<强>更新

定义描述您的实体的类型:

public class Flight
{
   public decimal Code { get; set; }
   public string Company { get; set; }
   public string Airport { get; set; }       
}

更改您的方法以返回实体的实例:

public Flight GetFlight(int tip, string country)

创建一个从该方法返回的新实例,并从数据库查询结果填充它:

var flight = new Flight();
flight.Code = reader.GetDecimal(cod_zbor);
flight.Airport = reader.GetString(nume_aeroport);
flight.Company = reader.GetString(nume_companie);
return flight;

现在您的其他方法可以使用更新的方法:

var flight = searchFly.GetFlight(...);
// access flight properties here

这假定您的查询返回单个实体。如果它返回了一个集合,那么您可以根据需要使用List<Flight>IEnumerable<Flight>作为返回类型。