Use an array to populate a listbox?
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开发者_如何学JAVA> 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();
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;
}
-- 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>();
(untested)
this.ddlReasonsWhy.DataSource = reasonsList.getReasons;
this.ddlReasonsWhy.DataBind();
Just a thought, but how about:
this.ddlReasonsWhy.Items.Add(reasonsList.getReasons().Select(r => new ListItem(r)));
精彩评论