C# 下拉项 0 - 100,而不添加每个项

本文关键字:添加 | 更新日期: 2023-09-27 17:56:08

对不起,如果这是一个愚蠢的问题......我只是想学习最好的方法。 基本上,我想有一个下拉列表,其中值为空白,然后是 0 - 100。

无需手动输入每个内容的最佳方法是什么。 我想它是通过某种形式的列表绑定到下拉列表。

提前感谢您的帮助。

C# 下拉项 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") %>

如果这是网络表单:
我想你想在你的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());
}
ddl.DataSource = Enumerable.Range(1, 100);
ddl.DataBind();
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();
}

vb:

For i As Integer = 0 To 100
                ddlperiod.Items.Add(i)
            Next