2016-08-01 4 views
1

У меня есть код для отображения информации о времени (In Time, Out Time, Comments, Employee Name) для всех сотрудников SQL в Excel 2010 с использованием Excel Add-In. Здесь я хотел продвинуться вперед, чтобы отобразить информацию о времени для выбранного сотрудника из элемента управления ComboBox (который содержит имя сотрудника и идентификатор сотрудника в свойствах меток и тегов соответственно) помещают в ленту Excel с помощью надстройки Excel.Получить тег выбранного элемента управления Ribbon ComboBox в VSTO (VB.Net)

Здесь мне не удалось получить тег выбранного сотрудника (Id) из ComboBox, который я добавил.

Пожалуйста, помогите мне решить эту проблему.

Thanks

ответ

3

Ну, это немного сложно, но выполнимо. Во-первых вы можете сделать это только с помощью ленты XML (не через дизайнер - по крайней мере, я не знаю об этом)

Я создал очень простой 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> 

Ключевой частью является GetItemCount (вы можете назвать его как хотите) Без этого обратного вызова вы никогда не получите обратного вызова для getItemID или getItemLabel.

Остальное затем легко создать объект, который хранит всю необходимую информацию, как здесь

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

инициировать объект со значениями, как показано ниже (для облегчения Ниже я положил все в классе ленты, но это, безусловно, плохой подход)

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 
} 

, а затем обратные вызовы (еще внутри класса Ribbon1) (для списка обратных вызовов относится 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); 
    } 

Затем вы должны увидеть выпадающий список в приложении офиса, на вкладке Надстройки со значениями дерева в этом примере, и когда вы выбираете тот, который вы должны получить имя и идентификатор наемный рабочий.

+0

Спасибо за ваш ответ. Позвольте мне попробовать. –

+0

Awesome !! Его работа прекрасна ... Спасибо @PetLahev. –

Смежные вопросы