2011-05-09 99 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();