0

このようなデータがあります...

id->name->floor
1->store1->1
2->store2->1
3->store2->2
4->store2->3
5->store3->2

comboboxこのようなwithディスプレイに追加したい...

store1          
store2          
store3          

私が取得したい store2 を選択したとき、 私はロジックを考えますvaluemember = 2, 3, 4

(私はまだコードを試していません)... しかし、私は500++のデータを持っているので、プロセスを無駄にすることだと思います
valuemember = 2databaseidname

何か案が??

注: 例 これは単なるサンプルフォームです。コーディングの方法がわかりません。デザインを作成するだけ
です。cmdではなくコンボボックスの実装を教えていただければ助かります

4

3 に答える 3

1

ComboBox に入れる前に、データをグループ化できます。小さなサンプルをまとめました(リンクに従って実行または変更してください)。

using System;
using System.Collections.Generic;
using System.Linq;

    public class MyData
    {

    public int Id { get; set; }
    public string Name { get; set; }
    public int Floor { get; set; }
}

public class MyGroupedData
{
    public string Name { get; set; }
    public IEnumerable<int> Floors { get; set; }
}

public class Test
{
    public static void Main()
    {
        MyData[] data = { 
            new MyData() { Id = 1, Name = "Store1", Floor = 1 }, 
            new MyData() { Id = 2, Name = "Store2", Floor = 1 }, 
            new MyData() { Id = 3, Name = "Store2", Floor = 2 }, 
            new MyData() { Id = 4, Name = "Store2", Floor = 3 }, 
            new MyData() { Id = 5, Name = "Store3", Floor = 2 },
        };
        var groupedData = from x in data group x by x.Name into grp 
            select new MyGroupedData() { Name = grp.Key, Floors = grp.Select(y => y.Floor) };
        foreach(var g in groupedData)
            Console.WriteLine("{0} -> {1}", g.Name, string.Join(", ", g.Floors.Select(x => x.ToString()).ToArray()));
    }
}

このサンプルはコンソール アプリケーションですが、問題を解決するために必要な主な手順が示されていることを願っています。ComboBox をグループ化操作の結果にバインドし、SelectedItem プロパティを使用して選択した項目にアクセスします。また、SelectedValue プロパティを使用するために、値メンバーを「Floors」に設定できます。
さらに、ComboBox に名前が表示されるように、表示メンバーを "Name" に設定します。
注意すべきことの 1 つは、グループ化すると、レコードの ID が失われることです。この場合、これが貴重な情報である場合は、グループ化ステートメントを調整して、フロアだけでなく id もグループ項目に含める必要があります。ID が店舗名と同じ場合 (サンプル データではそうではありません)、Id プロパティを MyGroupedData クラスに追加できます。

于 2013-12-22T10:02:54.517 に答える
1

選択したアイテムのデータを簡単に取得したいですか? 選択したアイテムから直接データを取得できるように、データに特別なタイプを入力することを好みます。関数には Object 型のパラメーターが必要なのでCombox.Item.Add()、最初に次のように新しい型でデータを定義することをお勧めします。

/// <summary>
/// my own data define
/// </summary>
public class MyFloor
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Floor { get; set; }

    //very important, the result will be displayed in the combox
    public override string ToString()
    {
        return string.Format("{0}->{1}->{2}", ID, Name, Floor);
    }
}

次に、特別なタイプでデータをコンボックスに入力できます。

void FillData()
    {
        //load data from txt or database
        List<MyFloor> floorList = new List<MyFloor>(){
            new MyFloor{ID=1, Name="store1", Floor="1"},
            new MyFloor{ID=2, Name="store2", Floor="1"},
            new MyFloor{ID=3, Name="store2", Floor="2"},
            new MyFloor{ID=4, Name="store2", Floor="3"},
            new MyFloor{ID=5, Name="store3", Floor="2"}
            };
        //fill into combox
        foreach (MyFloor floor in floorList)
        {
            this.comboBox1.Items.Add(floor);
        }
    }

最後に、データを直接取得できます。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //retrieve data from selected item as MyFloor object
        MyFloor floor = this.comboBox1.SelectedItem as MyFloor;
        //show the selected data object
        if (floor != null)
        {
            txtID.Text = floor.ID.ToString();
            txtName.Text = floor.Name;
            txtFloor.Text = floor.Floor;
        }
    }

ここに私の結果があります: 結果ショー

于 2013-12-22T09:55:57.863 に答える
0

.NET には、DataSource プロパティで LINQ 結果、リスト、データセットなどを受け入れる機能があります。次のようなことができます。

    comboBox.DataSource = DataSetObject;
    comboBox.DisplayMember = "DataTableFromDataSetObject.nameColumn";
    comboBox.ValueMember = "DataTableFromDataSetObject.idColumn";
    /*-------OR LINQ OBJECT-----------*/

    comboBox.DataSource = (from dt.Select() in row  
                        select new {name = row["nameColumn"],id = row["idColumn"]}).ToList();
    comboBox.DisplayMember = "nameColumn";
    comboBox.ValueMember = "idColumn";

これがあなたの質問に役立つことを願っています

于 2014-01-17T19:16:07.730 に答える