Заполнить раскрывающийся список от нажатия кнопки - PullRequest
1 голос
/ 21 мая 2019

У меня есть пользовательское действие, которое я хочу передать в имя сервера sql, и оно заполняет раскрывающийся список с результатами, однако выпадающий список не получает обновления с результатами

Добавлено пользовательское действие

[CustomAction]
        public static ActionResult PopulateAvailableDatabases(Session session)
        {
            const string availableDatabases = "AVAILABLE_DATABASES";

            session.Log("inside PopulateAvailableDatabases");

            var view = session.Database.OpenView($"DELETE FROM ComboBox WHERE ComboBox.Property='{availableDatabases}'");
            view.Execute();

            view = session.Database.OpenView($"SELECT * FROM ComboBox WHERE ComboBox.Property='{availableDatabases}'");
            view.Execute();

            var databases = GetDatabases(session);
            int index = 0;

            try
            {
                foreach (var database in databases)
                {
                    session.Log(database);

                    var record = session.Database.CreateRecord(3);
                    record.SetString(1, availableDatabases);
                    record.SetInteger(2, index++);
                    record.SetString(3, database);

                    view.Modify(ViewModifyMode.InsertTemporary, record);
                }
            }
            catch (Exception ex)
            {
                ex.ToString();
                session.Log("Exception Details: " + ex.Message);
            }
            view.Close();

            session.Log("Closing view");
            view.Close();
            return ActionResult.Success;
        }

Это в моем диалоговом окне:

  <Control Id="FindDatabase" Type="PushButton" X="270" Y="65" Width="56" Height="17" Text="&amp;Find Databases">
          <!--<Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>-->
          <Publish Event="DoAction" Value="PopulateAvailableDatabases">1</Publish>
          <!--<Publish Event="EndDialog" Value="Return">1</Publish>-->
        </Control> 

Вот раскрывающийся список:

  <Control Id="DatabaseNameLabel" Type="Text" X="47" Y="181" Width="100" Height="15" TabSkip="no" Text="&amp;Database:" />
        <Control Id="DatabaseNameEdit" Type="ComboBox" X="45" Y="194" Width="220" Height="18" Property="AVAILABLE_DATABASES">
          <ComboBox Property="AVAILABLE_DATABASES">
            <ListItem Text="[AVAILABLE_DATABASES]" Value="[AVAILABLE_DATABASES]"  />
          </ComboBox>
          <Publish Property="DATABASE_NAME" Value="0">1</Publish>
        </Control>

1 Ответ

0 голосов
/ 21 мая 2019

Решение проблемы обновления диалога MSI : Чтобы обойти проблему обновления диалога MSI (отсутствие / сбой событий обновления диалога), вы можете переключаться между диалогами, чтобы принудительно обновить состояние для всех элементов управления в диалоге. См. Обходной путь Стефана Крюгера ниже или используйте событие нажатия следующей кнопки, чтобы показать элемент управления в следующем диалоговом окне, как утверждает Джон.


Пришлось добавить как ответ, слишком долго для комментария. Только подсказки.

github.com : посмотрите на эти примеры с github: github.com search .

Проблемы с обновлением : Насколько я помню, есть проблемы с обновлением диалога, когда вы перехватываете DoActions вплоть до событий кнопки (возврат к предыдущему диалогу а затем еще раз, чтобы увидеть, если список содержит элементы). Попробуйте событие инициализации диалога? Возможно, это тот, который вы используете?

Обходной путь Стефана Крюгера : О, и это от Стефана Крюгера: http://www.installsite.org/pages/en/msi/articles/MultiListBox/index.htm. Насколько я помню, он перепрыгивает между двумя диалогами, чтобы справиться с проблемой обновления. Прошло много времени с тех пор, как я посмотрел на него. Это основанная на VBScript, но общая концепция.

Должен бежать, проверьте позже. Повеселись.

...