0

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));

                }
        }

誰かが私を助けてくれますか?

4

2 に答える 2

0

最初に、ListView をビュー モードの詳細に配置する必要があります。これは、次のコードで行います (デザイナーで 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# とオブジェクト指向プログラミングの基礎。

于 2012-09-30T09:29:31.387 に答える
0

このコードには多くの問題があります。ArrayListまず、一般的なコレクション型の代わりに使用している理由はありますか? 例えばList<T>

次に、エンティティの列の値を型指定されていないコレクションに入れるのではなく、エンティティの 1 つのインスタンスに関連するすべてのデータを格納する型を作成します。

第三に、ループ内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>orを使用できます。IEnumerable<Flight>

于 2012-09-30T09:29:51.497 に答える