2010-01-07 108 views
1

我正在处理的网站将包含一个显示许多原因代码的下拉列表。使用数组来填充列表框?

是否可以使用派生自自定义类的数组填充下拉列表?

事情是这样的:

ASPX页面

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

ASPX代码隐藏

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

自定义类

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

     return Reasons; 
    } 

UPDATE1:

多亏了答案,这个堆link我的最终解决方案类似于艾哈迈德和柔滑的答案。

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; 

    } 

代码隐藏

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

回答

3

使用列表项,而不是的AddRange添加

编辑:getReasons是不是一个变量如此使用getReasons()

ASPXPAGE

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

ASPX代码隐藏

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

自定义类

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

     return Reasons; 
    } 
+0

谢谢 - 这非常有帮助 - 请参阅我的update1以获取正确的类语法。 – 2010-01-07 15:39:29

1

(未经测试)

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

试过了 - 得到一个空引用异常 – 2010-01-07 14:57:35

0

只是一个想法,但如何:

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

- 编辑:

我注意到您特别想绑定到一个数组。我不相信是可能的(可能是错误的);我将下面的示例留给如何为自定义类实现,也许它是有用的,也许不是。希望别人能更直接地回答你。

- 老:

当然,这是,像这样:

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

但是要注意,在你的榜样,你还没有发布的类,您发布的方法。在关于 'yourDataSource' 的例子应该是这样的:

+0

感谢 - 肯定了我在正确的方向。 – 2010-01-07 15:38:43