2011-05-09 93 views
4

对不起,如果这是一个愚蠢的问题...我只是想学习最好的方式来做到这一点。基本上我想有一个下拉列表,其值为空白,然后为0 - 100.C#下拉项目0 - 100没有添加每个项目?

什么是最好的方式做到这一点,而不需要手动输入每一个。我想它是通过绑定到下拉列表的某种形式。

Thankyou提前的帮助。

+1

请告诉我们你正在开发什么样的应用程序。它是WinForms吗?的WebForms? MVC? Silverlight的?等等... – 2011-05-09 17:02:16

+7

这听起来真的很糟糕的可用性。尼尔森诺曼已经进行了大量的研究,显示出提供具有验证的自由格式文本通常比选择列表非常长。 – 2011-05-09 17:03:05

回答

9

这是一种方法这样做的:

ddl.Items.AddRange(Enumerable.Range(0, 100).Select (e => new ListItem(e.ToString())).ToArray()); 
+0

这是如何处理开始的空白? – 2011-05-09 19:29:50

+1

@Ben它不,但我不认为这是问题中的问题。 – Magnus 2011-05-09 19:31:50

+0

不要过于迂腐,但问题是:“基本上我想要一个下拉列表,其值为空白,然后为0 - 100”。 – 2011-05-09 22:34:42

6

您可以使用for循环。

myControl.Items.Add(new ListItem(string.Empty, -1)); 
for(int j = 0; j < 100; j++) 
{ 
    var newOption = new ListItem("Item #" + (j + 1).ToString(), j.ToString()); 
    myControl.Items.Add(newOption); 
} 
+0

我很确定OP想要一个下拉值“'”,0,1,2,3..',所以它应该可能是'myControl.Items.Add(j.ToString())',你错过了空的字符串。 – 2011-05-09 17:35:44

+0

当然......但更重要的一点是,他可以使用for循环重复添加0-99元素。 – Tejs 2011-05-09 18:11:58

+0

同意,但如果您包含实际解决OP问题的解决方案,那将是一个更好的答案。还包括更通用的解决方案也很好。 – 2011-05-09 18:15:14

0
combo.Items.Add("") 
for (int i = 0; i < 100; i++) 
    combo.Items.Add(i) 

而且,考虑使用NumericUpDown控制与100这最大值不会给你空白的选择,而是一个可以说是更好的可用性选择。

3

如果你将列表(数组,集合等...)作为数据源绑定到下拉列表(winforms?webforms?)中,总是会创建项目。如果你不希望添加的每一项manualy,你可以用代码做到这一点:

// this code is for winforms 
dropDown.Items.Clear(); 
dropDown.Items.Add(string.Empty); 
for(int i = 0; i <= 100; i++) { 
    dropDown.Items.Add(i.ToString()); 
} 
1

如果是这样的WebForms:
我想你想在你的Page_Load事件这样的事情。

if(Page.IsNotPostBack) 
{ 
    DropDownList1.Items.Add(new ListItem("","")); 
    for(int i = 0; i <= 100; i++) 
     DropDownList1.Items.Add(new ListItem(i.ToString(), i.ToString()); 
} 
0

创建一个工具来生成自己的价值观:

public class Utils 
{ 
    public static IEnumerable<string> GetSequenceEntries(long maxValue) 
    { 
     yield return string.Empty; 

     for(int i=1; i<=maxValue; i++) 
     { 
      yield return i.ToString(); 
     } 
    } 
} 

那么对于一个WinForms应用程序将其绑定与此类似:

private void Form1_Load(object sender, EventArgs e) 
{ 
    comboBox1.DataSource = Utilities.Utils.GetSequenceEntries(100).ToList<string>(); 
} 

或为ASP.NET绑定这样的:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ddl1.DataSource = Utilities.Utils.GetSequenceEntries(100); 
    ddl1.DataBind(); 
} 
+2

C#中已经有一个'Range'函数。 (0,100).Select(e => new ListItem(e.ToString()))。ToArray());' – Magnus 2011-05-09 17:30:50

+0

@Magnus也许你应该把它作为答案? – 2011-05-09 18:17:27

+0

@Magnus请发表评论作为回答,我会将其标记为答案我认为这是最优雅的解决方案!谢谢大家对于所有的投入。 – 2011-05-09 18:44:18

2

例如在asp.net MVC:

控制器:

ViewData["list"] = new SelectList(Enumerable.Range(0, 101) 
       .Select(p => new SelectListItem() { Text = p.ToString(), Value = p.ToString() })); 

查看:

<%=Html.DropDownList("numbers", ViewData["list"] as SelectList, "Select a number") %> 
0

VB:

For i As Integer = 0 To 100 
       ddlperiod.Items.Add(i) 
      Next 
1
ddl.DataSource = Enumerable.Range(1, 100); 
ddl.DataBind();