单击按钮填充下拉菜单

时间:2019-05-21 05:25:10

标签: c# wix custom-action

我有一个自定义操作,我想传递一个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 :(得分:0)

  

MSI对话框更新问题解决方法 :要变通解决MSI对话框更新问题(缺少对话框更新事件/使对话框更新事件发生故障),可以在对话框之间跳转以强制更新状态。对话框上的所有控件。请参见下面的Stefan Kruger的变通方法,或使用下一个按钮的click事件,以按照约翰在上面所述的方式在下一个对话框上显示控件。


  

必须添加为答案,评论时间太长。仅提示。

github.com :看看来自github的这些示例:github.com search

更新问题 :我记得当您将 DoActions 与按钮事件挂钩时,对话框更新问题存在问题(返回上一个对话框,然后再返回下一个对话框,以查看列表是否包含项)。尝试对话框初始化事件?那是您正在使用的那个吗?

Stefan Kruger的解决方法 :哦,这是Stefan Kruger讲的:http://www.installsite.org/pages/en/msi/articles/MultiListBox/index.htm。我记得他在两个对话框之间跳转来处理更新问题。自从我看了已经有一段时间了。这是基于VBScript的通用概念。

可以运行,以后再检查。玩得开心。