2017-08-30 97 views
1

我已经添加了组合框到我的用户界面。如何从自定义动作填充WIX组合框

<Control Id ="ExistingPortCombo" Type="ComboBox" X="120" Y="120" Width="200" Height="50" Property="ComboSelectedPort" ComboList="yes" > 
<ComboBox Property="ComboSelectedPort" /> 
</Control> 

我希望它从自定义操作中填充。我尽可能做到这一点。

这里是我的功能来填充列表

static int index = 0; 
    private static void AddRecordToList(string propertyName,string text,string value,string control) 
     { 
      try 
      { 
       View view = CurrentSession.Database.OpenView("SELECT * FROM " + control); 

       view.Execute(); 

       Record record = CurrentSession.Database.CreateRecord(4); 

       record.SetString(1, propertyName); 
       record.SetInteger(2, ++index); 
       record.SetString(3, text); 
       record.SetString(4, value); 

       view.Modify(ViewModifyMode.InsertTemporary, record); 
       view.Close(); 
      } 
      catch (Exception ex) 
      { 
       global::System.Windows.Forms.MessageBox.Show(ex.Message); 
      } 
     } 

然后我打电话:

AddRecordToComboBox("ComboSelectedPort", text, value,"ComboBox"); 

此方法适用于列表框,但但对于组合框给出错误。

任何人都可以看到我在这里做错了吗?

回答

1

基于this后,我可以填充组合框

中的.msi我不得不创建组合框的表将一个项目添加到一个值。

<ListItem Value="1" Text="DumyData" /> 

我在这里添加的项目没有在我的ComboBox上列出,所以现在这是可以的。如果有人知道如何以适当的方式做到这一点,欢迎回答。

我的控制器现在看起来像这样。

<Control Id ="ExistingPortCombo" Type="ComboBox" X="120" Y="120" Width="200" Height="50" Property="ComboSelectedPort" ComboList="yes" > 
<ComboBox Property="ComboSelectedPort" > 
    <ListItem Value="1" Text="DumyData" /> 
</ComboBox> 

0

我已经使用了几乎相同的方法。

你可以试着读端口列表的这个例子从文件:

[CustomAction] 
    public static ActionResult GetPortsFromFile(Session session) 
    { 
      const string tableName = "ComboBox"; 
      const string Property = "ComboSelectedPort"; 
      const string PortsConfigFile = "Ports.txt"; 

      string strPorts = File.ReadAllText(PortsConfigFile); 

      string[] PortsList = strPorts.Split(','); 

      int order = 2; 
      foreach (var Port in PortsList) 
      { 
       string value = Port.ToString(); 
       string text = Port.ToString(); 
       object[] fields = new object[] { Property, order, value, text }; 
       InsertRecord(session, tableName, fields); 

       order++; 
      } 

      return ActionResult.Success; 
    } 

    private static void InsertRecord(Session session, string tableName, Object[] objects) 
    { 
     Database db = session.Database; 
     string sqlInsertSring = db.Tables[tableName].SqlInsertString + " TEMPORARY"; 
     session.Log("SqlInsertString is {0}", sqlInsertSring); 
     View view = db.OpenView(sqlInsertSring); 
     view.Execute(new Record(objects)); 
     view.Close(); 
    }