2016-08-01 32 views
1

Ich habe einen Code, um Zeiteintrag (In Time, Out Time, Kommentare, Mitarbeitername) Informationen für alle Mitarbeiter von SQL in Excel 2010 mit Excel Add-In-Projekt. Hier wollte ich einen Schritt weiter gehen, um Zeiteintragsinformationen für ausgewählte Mitarbeiter aus dem ComboBox-Steuerelement (das den Mitarbeiternamen und die Mitarbeiter-ID in Label- bzw. Tag-Eigenschaften enthält) in Excel-Menüband mit Excel-Add-In zu platzieren.Erhalten Sie ausgewählte Tag-Tag des Ribbon ComboBox-Steuerelement in VSTO (VB.Net)

Hier konnte ich das Tag (Id) des ausgewählten Mitarbeiters nicht von der ComboBox abrufen, die ich hinzugefügt habe.

Bitte helfen Sie mir, dies zu lösen.

Danke

Antwort

3

Nun, das ist ein bisschen schwierig, aber machbar. Zuerst kann man tun, dass nur über Ribbon XML (nicht über Designer - zumindest ich nicht darüber wissen)

Ich habe sehr einfache XML

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load"> 
    <ribbon> 
    <tabs> 
     <tab idMso="TabAddIns"> 
     <group id="MyGroup" 
       label="My Group"> 
      <dropDown id ="cbTest" 
        label="Test Item" 
        getItemID="GetItemID" 
        getItemLabel="GetItemLabel" 
        getItemCount="GetItemCount" 
        onAction="OnAction"> 
      </dropDown > 
     </group> 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 

Der wichtigste Teil ist die GetItemCount (können Sie es benennen, wie Sie wollen) Ohne diesen Rückruf erhalten Sie nie einen Rückruf für die getItemID oder getItemLabel.

Der Rest ist dann einfach, ein Objekt erstellen, die alle Informationen speichern die Sie benötigen, wie hier

public class Employee 
    { 
     public Employee(int id, string name) 
     { 
      this.ID = id; 
      this.Name = name; 
     } 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 

das Objekt mit Werten wie unten initiieren (für leichtere folgend ich alle in der Ribbon-Klasse setzen, aber dies ist auf jeden Fall schlechter Ansatz)

public class Ribbon1 : Office.IRibbonExtensibility 
    { 
     private Office.IRibbonUI ribbon; 
     private List<Employee> _employees = new List<Employee>(); 

     public Ribbon1() 
     { 
      _employees.Add(new Employee(1, "John")); 
      _employees.Add(new Employee(2, "Mark")); 
      _employees.Add(new Employee(3, "Tom")); 
     } 
// ... rest of the code here 
} 

und dann die Rückrufe (noch innerhalb der Ribbon1 Klasse) (für Liste von Callbacks bezieht sich here)

public int GetItemCount(Office.IRibbonControl control) 
    { 
     return _employees.Count; 
    } 

    public string GetItemID(Office.IRibbonControl control, int index) 
    { 
     var employee = _employees[index]; 
     return employee.ID.ToString(); 
    } 

    public string GetItemLabel(Office.IRibbonControl control, int index) 
    { 
     var employee = _employees[index]; 
     return employee.Name; 
    } 

    public void OnAction(Office.IRibbonControl control, string selectedId, int selectedIndex) 
    { 
     var selected = string.Format("{0} ({1})", _employees[selectedIndex].Name, _employees[selectedIndex].ID); 
     System.Windows.Forms.MessageBox.Show(selected); 
    } 

Dann sollten Sie die Dropdown-Liste in Ihrer Office-Anwendung, unter der Registerkarte Add-Ins mit den Baum Werte in diesem Beispiel sehen, und wenn Sie eine auswählen sollten Sie Name und die ID des bekommen Mitarbeiter.

+0

Danke für Ihre Antwort. Lass mich das versuchen. –

+0

Super !! Es funktioniert gut ... Danke @PetLahev. –