簡體   English   中英

C#下拉項目0 - 100而不添加每個項目?

[英]C# Dropdown items 0 - 100 without adding each item?

對不起,如果這是一個愚蠢的問題......我只是想學習最好的方法。 基本上我想要一個值為空的下拉列表,然后是0 - 100。

什么是最好的方法,而無需手動輸入每個。 我想這是通過某種形式的列表綁定到下拉列表。

謝謝你提前幫忙。

這是一種方法:

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

你可以使用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);
}

如果將列表(數組,集合等)作為數據源綁定到下拉列表(winforms?webforms?)中,則始終會創建項目。 如果您不想手動添加每個項目,可以使用代碼執行此操作:

// 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() );
}

例如在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") %>
ddl.DataSource = Enumerable.Range(1, 100);
ddl.DataBind();

如果這是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());
}

VB:

For i As Integer = 0 To 100
                ddlperiod.Items.Add(i)
            Next
combo.Items.Add("")
for (int i = 0; i < 100; i++)
  combo.Items.Add(i)

另外,請考慮使用最大值為100的NumericUpDown控件。這不會給您一個空白的選擇,但可以說是更好的可用性選擇。

創建一個實用程序來生成您的值:

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM