Инфраструктура UltraDropDown не отображается - PullRequest
0 голосов
/ 27 августа 2018

У меня есть элемент управления сеткой инфраструктуры, который имеет два столбца: в одной из строк отображаются имена определенных настроек, а в другом - раскрывающееся меню со значениями, доступными для имени, с которым оно связано. Все значения одинаковы. Я добавил раскрывающийся список в конструкторе после его создания и добавления в элемент управления следующим образом:

Me.settingLevelDrpDown.DataSource = MyDict.ToList()
Me.settingLevelDrpDown.ValueMember = "Key"
Me.settingLevelDrpDown.DisplayMember = "Value"

В этом случае MyDict - это Dictionary(Of MyEnum, String), где MyEnum - это просто перечисление. Код, который отображает это:

settingLevelDrpDown.Visible = True
settingLevels.DisplayLayout.Bands(0).Columns(1).ValueList = settingLevelDrpDown

Пока у меня есть две проблемы:

Во-первых, когда я отображаю раскрывающийся список, я получаю таблицу с одной строкой для Key и списком ключей enum и строкой для Value со списком строк, которые я на самом деле хочу для отображения. Как я могу убедиться, что enum-ключи привязаны к выпадающему выбору, при этом отображая строковые значения?

Второе - производительность. Я прочитал третий раздел this и, насколько я могу судить, я не спотыкался ни по одному из перечисленных пунктов, но время загрузки очень медленное, и приложение очень сильно отстает даже после формы загружаются.

Любая помощь с этими двумя проблемами будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 августа 2018

Я бы работал, чтобы избежать UltraDropDown в вашем коде.
Я бы просто использовал свойство ValueList столбца.

Предположим, что ваш MyDict является экземпляром этого класса

Dim myDict As Dictionary(Of Int32, String) = New Dictionary(Of Int32, String)

Я бы преобразовал его в ValueList с помощью метода, подобного этому

Public Function ToValueList(settings As Dictionary(Of Int32, String)) As ValueList
    Dim result As ValueList = New ValueList()
    For Each kvp As KeyValuePair(Of Int32, String)  In settings
         result.ValueListItems.Add(kvp.Key, kvp.Value)
    Next
    Return result
End Function

Теперь в вашем событии InitializeLayout вашей сетки вы можете написать

Dim b as UltraGridBand = settingLevels.DisplayLayout.Bands(0)

' Just to avoid the user typing something not expected
' Default is an editable DropDown 
b.Columns(1).Style = ColumnStyle.DropDownList

b.Columns(1).ValueList = ToValueList(MyDict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...