?
Solved

Populate ComboBox in Custome Ribbon

Posted on 2011-09-30
14
Medium Priority
?
3,949 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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
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 500 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 500 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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
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…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

771 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