Solved

Populate ComboBox in Custome Ribbon

Posted on 2011-09-30
14
3,877 Views
Last Modified: 2013-11-10
How do I populate a combobox that is in a custom ribbon. When I try to use the .Items.Add() method (or whatever it's called) I get an error message that reads:

Cannot convert from 'object' to 'Microsoft.Office.Tools.Ribon.RibbonDropDown'.

I have included the code I have so far.

Any and all help is welcome!
private void ThisWorkbook_Startup(object sender, System.EventArgs e)
        {   

            OracleConnection cs = new OracleConnection("User Id=MyUserID;Password=MyPassword;Data Source=OracleSID");
            OracleDataAdapter da = new OracleDataAdapter("SELECT JOB_CODE, JOB_NAME FROM JCJOB", cs);

            DataTable dt = new DataTable();

            da.Fill(dt);
            
            for (int i = 0; i < dt.Rows.Count; i++)
            {
		//Error is generated at this line!                
		Globals.Ribbons.Ribbon1.cmbProject.Items.Add(dt.Rows[i]["JOB_CODE"]);                
                
            }
        }

Open in new window

0
Comment
Question by:Gary Jones
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
14 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 36896985
You would need to create a RibbonDropDown, and add instances of RibbonDropDownItems.

foreach (DataRow dr in dt.Rows)
{
     string jobCode = dr["JOB_CODE].ToString();
     dropDown.Items.Add(new RibbonDropDownItem() { Label = jobCode });                
}
0
 
LVL 1

Author Comment

by:Gary Jones
ID: 36897633
I am very new to c# so i am not sure what you mean by create a RibbonDropDown and add instanced of RibbonDropDownItems. Can I have an example of what you men?

Thanks in advance.
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 36897776
To create an instance of an object, you need to use the constructor (new keyword).  

This form might be a little too much for you, so let's rewrite it:

 
dropDown.Items.Add(new RibbonDropDownItem() { Label = jobCode });    

Open in new window

           

1) Construct a RibbonDropDown:

RibbonDropDown dropDown = new RibbonDropDown();

Open in new window


2) Loop through each of your data rows, using the enumerator, instead of an index variable (i in your case):

foreach (DataRow dr in dt.Rows)
{
}

Open in new window


3) Create RibbonDropDownItems for each row, and add to the RibbonDropDown.  Set the Label fro the drop-down item to the field value.

foreach (DataRow dr in dt.Rows)
{
    RibbonDropDownItem dropDownItem = new RibbonDropDownItem();
    dropDownItem.Label = dr["JOB_CODE].ToString();
}

Open in new window


4) Add the RibbonDropDown to the control:

Globals.Ribbons.Ribbon1.cmbProject.Items.Add(ribbonDropDown);

Open in new window

0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Author Comment

by:Gary Jones
ID: 36899555
I now get thefollowing errors:

Error      1      Cannot create an instance of the abstract class or interface 'Microsoft.Office.Tools.Ribbon.RibbonDropDown'

Error      2      Cannot create an instance of the abstract class or interface 'Microsoft.Office.Tools.Ribbon.RibbonDropDownItem'
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 125 total points
ID: 36901067
I guess this is the perfect time to say that I really don't like the ribbon bar, so I don't have much experience with it...but, that doesn't mean that I am walking away from this.

Can you tell me if you feel comfortable trying to work with this (meaning:  can you work with it, and does it work)?

RibbonDropDownItem item 
      = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();

Open in new window

0
 
LVL 1

Author Comment

by:Gary Jones
ID: 36905553
TheLearnedOne, I was able to compile the RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem(); statement, what is the next step?
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 36906024
Next step:

item.Label = dr["JOB_CODE].ToString();

Open in new window


0
 
LVL 1

Author Comment

by:Gary Jones
ID: 36906247
The code in the "Next step" appears to have worked but now I think I must associate the item.Label to the cmbProject object. How do I add the values to the cmbProject "object" (not sure if that is the correct verbiage). Sorry, but I am extremely new to c# programming (no duh, right ;)).
0
 
LVL 96

Assisted Solution

by:Bob Learned
Bob Learned earned 125 total points
ID: 36906283
Next step is to create a RibbonDropDown:

RibbonDropDown dropDown = Globals.Factory.GetRibbonFactory().CreateRibbonDropDown(); 

Open in new window


0
 
LVL 1

Author Comment

by:Gary Jones
ID: 36906426
The RibbonDropDown (dropDown) has been created. I keep trying to add item.Label to the dropDown but I know I am still missing something as nothing is working. So, after the RibbonDropDown and RibbonDropDownItems have been created successfully, what is the next step?
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 36906461
Next step is to add the dropdown items to the dropdown:

dropDown.Items.Add(item);

Open in new window

0
 
LVL 1

Author Comment

by:Gary Jones
ID: 36906559
Error: Index must be within the bounds of the list. Parameter name: index. Not sure what that means but that is the error I get now.
0
 
LVL 1

Assisted Solution

by:Gary Jones
Gary Jones earned 0 total points
ID: 36906694
TheLearnedOne, I figured out where the syntax has to go, I did not put the RibbonDropDownItem statement in the foreach section of the code so only one dropdown item was getting created and I have multiple items to add. I have attached the final code that works.
foreach (DataRow dr in dt.Rows)
            {
                RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
                
                item.Label = dr["JOB_CODE"].ToString();                
                Globals.Ribbons.Ribbon1.cmbProject.Items.Add(item);
            }

Open in new window

0
 
LVL 1

Author Closing Comment

by:Gary Jones
ID: 36935305
I had a difficult time following the code, I did not know where the code needed to go and was confused (the reason for B grade).
0

Featured Post

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
C# Service FileSystemwatcher isse 9 64
Need help with a query 14 53
aspx ascx, c# 7 42
Unprotect Visio drawing page in C# 4 19
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Attackers love to prey on accounts that have privileges. Reducing privileged accounts and protecting privileged accounts therefore is paramount. Users, groups, and service accounts need to be protected to help protect the entire Active Directory …

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question