對不起,如果這是一個愚蠢的問題...我只是想學習最好的方式來做到這一點。基本上我想有一個下拉列表,其值爲空白,然後爲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