2017-08-30 5 views
1

J'ai ajouté une zone de liste déroulante à mon interface utilisateur.Comment faire pour remplir la zone de liste modifiable WIX à partir de l'action personnalisée

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

Je veux qu'il remplisse une action personnalisée. Je ai fait pour le faire comme ci-dessous.

Voici ma fonction pour remplir les listes

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); 
      } 
     } 

Et puis je l'appelle comme:

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

Cette méthode fonctionne pour les boîtes de liste mais mais pour zone de liste déroulante donne des erreurs. Est-ce que quelqu'un peut voir ce que je fais mal ici?

Répondre

1

Basé sur this après, je pourrais remplir la zone de liste déroulante

à créer table combobox dans le .msi je devais ajouter un élément à une valeur.

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

l'article que j'ai ajouté ici n'était pas répertorié sur mon ComboBox, donc pour l'instant c'est OK pour l'instant. Si quelqu'un sait comment le faire correctement, les réponses sont les bienvenues.

Mon contrôleur ressemble maintenant à ceci.

<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

J'ai utilisé presque la même méthode.

Vous pouvez essayer cet exemple de ports liste de lecture du fichier:

[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(); 
    }