填充Wix组合框

时间:2010-09-27 14:10:36

标签: wix

我正在使用from this link

中的代码

和我的Wix Dialogs看起来像这样

   <Control Id="DummyComboBox" Hidden="yes" Type="ComboBox" Sorted="yes" ComboList="yes" Property="DUMMYPROPERTY" X="65" Y="60" Width="150" Height="18">
      <ComboBox Property="DUMMYPROPERTY">
        <ListItem Text="Dummy" Value="Dummy"/>
      </ComboBox>
    </Control>
    <Control Id="SQLServer" Type="ComboBox" Sorted="yes" ComboList="yes"  X="150" Y="100" Width="110" Height="18" Property="DBSERVER"/>
    <Control Id="SQLServerLabel"  Type="Text" X="25" Y="100" Width="90" Height="18" NoPrefix="yes" Text="!(loc.SQLServerLabel)"/>

    <Control Id="SQLDatabaseName" Type="Edit" X="150" Y="120" Width="110" Height="18" Property="SQLDBNAME"/>
    <Control Id="SQLDBServerLabel" Type="Text" X="25" Y="120" Width="90" Height="18" NoPrefix="yes" Text="!(loc.SQLDatabaseLabel)"/>

    <Control Id="SQLUser"         Type="Edit" X="150" Y="140" Width="110" Height="18" Property="SQLUSER"/>
    <Control Id="SQLUServerLabel" Type="Text" X="25" Y="140" Width="90" Height="18" NoPrefix="yes" Text="!(loc.SQLUserLabel)"/>

    <Control Id="SQLPassword"     Type="Edit" X="150" Y="160" Width="110" Height="18" Property="SQLPASSWORD" Password="yes"/>
    <Control Id="SQLPServerLabel" Type="Text" X="25" Y="160" Width="90" Height="18" NoPrefix="yes" Text="!(loc.SQLPasswordLabel)"/>

我已经完成了代码,它运行正常。但是,当我显示Wix对话框时,组合框为空。知道我做错了什么

2 个答案:

答案 0 :(得分:5)

非常简单......

Hidden="yes"

Hidden="no"

你正在隐藏它。

答案 1 :(得分:1)

您需要编写自定义操作来填充组合框,例如为了填写服务器实例组合框你可能会写一些如下所示的东西: -

public static ActionResult FillServerInstances(Session xiSession)
{         
    xiSession.Log("Begin CustomAction");

    xiSession.Log("Opening view");
    View lView = xiSession.Database.OpenView(
        "DELETE FROM ComboBox WHERE ComboBox.Property='DBSRVR'");
    lView.Execute();

    lView = xiSession.Database.OpenView("SELECT * FROM ComboBox");
    lView.Execute();

    int Index = 1;
    bool flag = false;
    try
    {
        foreach (DataRow dr in Microsoft.SqlServer.Management.Smo.SmoApplication
                                        .EnumAvailableSqlServers(false).Rows)
        {
            String InstanceName = dr["Name"].ToString();

            if (InstanceName.Equals(xiSession["ComputerName"]
                + @"\"
                + xiSession["SQLINSTANCENAME"],
                StringComparison.InvariantCultureIgnoreCase))
            { flag = true; }

            Record lRecord = xiSession.Database.CreateRecord(4);
            xiSession.Log("Setting record details");
            lRecord.SetString(1, "DBSRVR");
            lRecord.SetInteger(2, Index);
            lRecord.SetString(3, InstanceName);
            lRecord.SetString(4, InstanceName);

            xiSession.Log("Adding record");
            lView.Modify(ViewModifyMode.InsertTemporary, lRecord);

            ++Index;
        }
    }
    catch (Exception ex)
    {
        logException(xiSession, ex);              
    }
    if (flag)
    {
        xiSession["DBSRVR"] = xiSession["ComputerName"].ToString()
            + @"\" + xiSession["SQLINSTANCENAME"].ToString();
    }

    lView.Close();

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