对不起,如果这是一个愚蠢的问题...我只是想学习最好的方式来做到这一点。基本上我想有一个下拉列表,其值为空白,然后为0 - 100.C#下拉项目0 - 100没有添加每个项目?
什么是最好的方式做到这一点,而不需要手动输入每一个。我想它是通过绑定到下拉列表的某种形式。
Thankyou提前的帮助。
对不起,如果这是一个愚蠢的问题...我只是想学习最好的方式来做到这一点。基本上我想有一个下拉列表,其值为空白,然后为0 - 100.C#下拉项目0 - 100没有添加每个项目?
什么是最好的方式做到这一点,而不需要手动输入每一个。我想它是通过绑定到下拉列表的某种形式。
Thankyou提前的帮助。
这是一种方法这样做的:
ddl.Items.AddRange(Enumerable.Range(0, 100).Select (e => new ListItem(e.ToString())).ToArray());
这是如何处理开始的空白? – 2011-05-09 19:29:50
@Ben它不,但我不认为这是问题中的问题。 – Magnus 2011-05-09 19:31:50
不要过于迂腐,但问题是:“基本上我想要一个下拉列表,其值为空白,然后为0 - 100”。 – 2011-05-09 22:34:42
您可以使用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);
}
我很确定OP想要一个下拉值“'”,0,1,2,3..',所以它应该可能是'myControl.Items.Add(j.ToString())',你错过了空的字符串。 – 2011-05-09 17:35:44
当然......但更重要的一点是,他可以使用for循环重复添加0-99元素。 – Tejs 2011-05-09 18:11:58
同意,但如果您包含实际解决OP问题的解决方案,那将是一个更好的答案。还包括更通用的解决方案也很好。 – 2011-05-09 18:15:14
combo.Items.Add("")
for (int i = 0; i < 100; i++)
combo.Items.Add(i)
而且,考虑使用NumericUpDown控制与100这最大值不会给你空白的选择,而是一个可以说是更好的可用性选择。
如果你将列表(数组,集合等...)作为数据源绑定到下拉列表(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());
}
如果是这样的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());
}
创建一个工具来生成自己的价值观:
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();
}
C#中已经有一个'Range'函数。 (0,100).Select(e => new ListItem(e.ToString()))。ToArray());' – Magnus 2011-05-09 17:30:50
@Magnus也许你应该把它作为答案? – 2011-05-09 18:17:27
@Magnus请发表评论作为回答,我会将其标记为答案我认为这是最优雅的解决方案!谢谢大家对于所有的投入。 – 2011-05-09 18:44:18
例如在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") %>
VB:
For i As Integer = 0 To 100
ddlperiod.Items.Add(i)
Next
ddl.DataSource = Enumerable.Range(1, 100);
ddl.DataBind();
请告诉我们你正在开发什么样的应用程序。它是WinForms吗?的WebForms? MVC? Silverlight的?等等... – 2011-05-09 17:02:16
这听起来真的很糟糕的可用性。尼尔森诺曼已经进行了大量的研究,显示出提供具有验证的自由格式文本通常比选择列表非常长。 – 2011-05-09 17:03:05