0

このクエリが DataSource として割り当てられている ComboBox に「ALL」アイテムを追加するように依頼されました。アイテム「ALL」は、コントロールで最初に表示されるはずです。

        Dim qryEmp = From emp In db.Members.ToList
                        Order By emp.LogonId Ascending
                        Select New GPUserQueryResult With {
                            .LoginId = emp.LogonId,
                            .FullName = GetUserName(emp.LogonId)
                        }

私が最終的に使用したコードは次のとおりです。

            Dim allUser() As GPUserQueryResult = {New GPUserQueryResult With {.LoginId = -1, .FullName = AllValues}}
            Dim addEmpty As IEnumerable(Of GPUserQueryResult) = allUser

            Dim allRecs As IEnumerable(Of GPUserQueryResult) = addEmpty.Union(qryEmp)

            EmpList = allRecs.ToDictionary(Function(x) x.LoginId, Function(x) x.FullName)

最初はこれを試しましたが:

            Dim allUser() As GPUserQueryResult = {New GPUserQueryResult With {.LoginId = -1, .FullName = AllValues}}
            Dim addEmpty As IEnumerable(Of GPUserQueryResult) = allUser

            Dim allRecs As IEnumerable(Of GPUserQueryResult) = qryEmp.Union(addEmpty)

            EmpList = allRecs.ToDictionary(Function(x) x.LoginId, Function(x) x.FullName)
            EmpList.Keys.OrderBy(Function(x) x)

しかし、「ALL」アイテムは常に最後でした.OrderByメソッドを使用しようとしたにもかかわらず、誰かが理由を説明できますか? そして、これが目標を達成するための最良の方法であった場合

4

1 に答える 1

1

上記のコードを試してみたところ、期待どおり「ALL」アイテムが最初に表示されました。なぜそれがあなたの側で機能しないのかわかりません。ただし、必要なことを行う別の簡単な方法は次のとおりです。

Dim qryEmp = .... ' your existing linq to retrieve employees

次に、「ALL」項目を最初の位置に挿入する必要があります。最初qryEmpに List オブジェクトに変換します。

Dim EmpList = qryEmp.ToList()

「ALL」項目を位置 0 に挿入します。

EmpList.Insert(0, New GPUserQueryResult With {.LoginId = -1, .FullName = AllValues})

リストを ComboBox にバインドします。

ComboBox1.DisplayMember = "FullName"
ComboBox1.ValueMember = "LoginId"
ComboBox1.DataSource = New BindingSource(EmpList, Nothing)

サンプル:

ここに画像の説明を入力

于 2013-10-05T03:16:49.953 に答える