1

The website I am working on will contain a drop-down list that shows a number of reason codes.

Is it possible to populate a drop-down list with an array derived from a custom class?

Something like this:

ASPX Page

<asp:DropDownList ID="ddlReasonsWhy" runat="server"></asp:DropDownList>

ASPX Code Behind

protected void Page_Load(object sender, EventArgs e)
{
    //instantiate custom class
    Class1 reasonsList = new Class1();
   //populate reasons list
   this.ddlReasonsWhy.Items.Add(reasonsList.getReasons);

Custom Class

public string[] getReasons()
    {
        string[] Reasons;
        Reasons[0] = "test";
        Reasons[1] = "test2";
        Reasons[2] = "test3";

        return Reasons;
    }

UPDATE1:

Thanks to the answers and this stack link my final solution is similar to Ahmet and silky answers.

Class

 public List<ListItem> getRejectReasons()
    {
        List<ListItem> reasons = new List<ListItem>();
        reasons.Add(new ListItem("Select Value", "0"));
        reasons.Add(new ListItem("Red", "1"));
        reasons.Add(new ListItem("Green", "2"));
        return reasons;

    }

Code Behind

 //instantiate custom class
 Class1 reject = new Class1();
 this.ddlReasonsWhy.DataSource = reject.getRejectReasons();
 this.ddlReasonsWhy.DataBind();

4 Answers 4

3

Use ListItem instead of string and Addrange for Add

edit: getReasons is not a variable so use getReasons()

ASPXPAGE

<asp:DropDownList ID="ddlReasonsWhy" runat="server"></asp:DropDownList>

ASPX Code Behind

protected void Page_Load(object sender, EventArgs e)
{
    //instantiate custom class
    Class1 reasonsList = new Class1();
   //populate reasons list
   this.ddlReasonsWhy.Items.AddRange(reasonsList.getReasons());
}

Custom Class

public ListItem[] getReasons()
    {
        ListItem[] Reasons;
        Reasons[0] = "test";
        Reasons[1] = "test2";
        Reasons[2] = "test3";

        return Reasons;
    }
Sign up to request clarification or add additional context in comments.

1 Comment

thanks - this was very helpful - please see my update1 for the correct class syntax.
3

-- Edit:

I've noticed you specifically wanted to bind to an array. I don't believe that is possible (may be wrong); I leave my example below of how to do it for a custom class, perhaps it is of use, perhaps not. Hopefully someone else answers you more directly.

-- Old:

Certainly it is, like so:

ddlList.DataSource     = yourDataSource;
ddlList.DataTextField  = "DisplayProperty";
ddlList.DataValueField = "PropertyForValue";
ddlList.DataBind();

But note, in your example you've not posted the class, you've posted a method. In the example about 'yourDataSource' should be something like:

List<YourObjects> yourDataSource = new List<YourObjects>();

Comments

1

(untested)

this.ddlReasonsWhy.DataSource = reasonsList.getReasons;
this.ddlReasonsWhy.DataBind();

Comments

0

Just a thought, but how about:

this.ddlReasonsWhy.Items.Add(reasonsList.getReasons().Select(r => new ListItem(r)));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.