0

ここに画像の説明を入力

コンボ ボックス内の名前を複数ではなく 1 回だけ表示することができないという問題が発生しました。私のコードにこの問題を引き起こすものはありますか? どんな助けでも大歓迎です。

以下は、名前をコンボ ボックスにリンクするコードです。

private void Create_EmpDetails_Load(object sender, EventArgs e)
    {
        using (satsEntities Setupctx = new satsEntities())
        {
            var viewEmpName = (from viewEN in Setupctx.employees
                               join ufi u in Setupctx.ufis on viewEN.UFISID equals u.UFISID
                               select new { u.EmployeeName , u.UFISID}).Distinct().ToList();

            cbName.DataSource = viewEmpName;
            cbName.DisplayMember = "EmployeeName";
            cbName.ValueMember = "EmployeeName";
            //cbName.ValueMember = "UFISID";

        }
    }
4

4 に答える 4

2

これらの行はそれぞれ異なるUFISIDため、Distinct()削除されません。

従業員に見せたいだけのようです。

cbName.DataSource = Setupctx.Employees;
于 2012-08-13T01:46:14.717 に答える
0

おそらく、交換するだけで十分でしょう

select new { u.EmployeeName , u.UFISID}

select new { u.EmployeeName }
于 2012-08-13T01:56:20.587 に答える
0

私はコードをこれに編集し、複数のレコードではなく 1 つの名前のみを表示することができました。

private void Create_EmpDetails_Load(object sender, EventArgs e)
    {
        using (satsEntities Setupctx = new satsEntities())
        {
            var viewEmpName = (from viewEN in Setupctx.employees
                               join ufi u in Setupctx.ufis on viewEN.UFISID equals u.UFISID
                               select new { u.EmployeeName }).Distinct().ToList();

            cbName.DataSource = viewEmpName;
            cbName.DisplayMember = "EmployeeName";
            cbName.ValueMember = "EmployeeName";
            //cbName.ValueMember = "UFISID";

        }
    }
于 2012-08-13T02:03:55.383 に答える
0

コンボボックスでは、文字列をユーザーの DisplayMember として表示し、メンバーの ID (おそらく重要) を ValueMember として表示します。より多くの時間を ids で作業します。私の例:

class Country
{
    public string Name { get; set; }
    public int ID { get; set; }
    public Country( int i,string s) { Name = s; ID = i; }
}

class ComboItem
{

    public string DisplayMember { get; set; }

    public int ValueMember { get; set; }

}


class ComboItemEqualityComparer : IEqualityComparer<ComboItem>
{

    public bool Equals(ComboItem item1, ComboItem item2)
    {
        if (item1.ValueMember == item2.ValueMember && item1.DisplayMember == item2.DisplayMember)
        {
            return true;
        }

        return false;
    }


    public int GetHashCode(ComboItem item)
    {
        string str = item.DisplayMember + item.ValueMember;
        return str.GetHashCode();
    }
}

テスト :

 List<Country> countries = new List<Country> {
                                  new Country(1,"UK"), 
                                  new Country(2,"Turkey"), 
                                  new Country(8,"Turkey"),
                                  new Country(5,"Turkey"), 
                                  new Country(2,"Turkey"),
                                  new Country(3,"USA") ,
                                  new Country(3,"USA")};  //.Distinct(new CountryEqualityComparer()).ToList();

        var Data = (from i in countries
                select new ComboItem { ValueMember = i.ID, DisplayMember = i.Name }).Distinct(new ComboItemEqualityComparer()).ToList();



        cbName.DataSource = Data;

        cbName.DisplayMember = "DisplayMember";
        cbName.ValueMember = "ValueMember";

表示名は同じでも、ID が異なるデータがある場合があります。ComboItemEqualityComparer equals メソッドを次のように変更できます。

public bool Equals(ComboItem item1, ComboItem item2)
    {
        if (item1.ValueMember == item2.ValueMember )
        {
            return true;
        }

        return false;
    }

楽しい。

この質問に対して、次のことができます。

....
select new ComboItem { ValueMember = u.UFISID, DisplayMember = u.EmployeeName }).Distinct(new yourIEqualityComparer()).ToList();
于 2012-08-13T03:35:35.830 に答える