Выпадающие элементы C # 0-100 без добавления каждого элемента?

#c# #.net

#c# #.net

Вопрос:

Извините, если это глупый вопрос… Я просто пытаюсь узнать, как это сделать наилучшим образом. В принципе, я хочу иметь выпадающий список с пустыми значениями, а затем 0-100.

Каков наилучший способ сделать это, не вводя каждый из них вручную. Я полагаю, что это через какую-то форму списка, привязанного к выпадающему списку.

Заранее благодарю вас за помощь.

Комментарии:

1. Пожалуйста, расскажите нам, что за приложение вы разрабатываете. Это WinForms? Веб-формы? MVC? Silverlight? И т.д…

2. Это звучит как действительно ужасное удобство использования. Нильсен Норман провел множество исследований, показывающих, что часто лучше предоставить текст в произвольной форме с проверкой, чем очень длинный список выбора.

Ответ №1:

Вот один из способов сделать это:

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

Комментарии:

1. Как это обрабатывает пробел в начале?

2. @Ben Это не так, но я не думаю, что это была проблема в вопросе.

3. Не хочу быть излишне педантичным, но вопрос гласит: «В принципе, я хочу иметь выпадающий список с пустыми значениями, а затем 0-100».

4. Это добавляет 0-100 к существующим элементам в списке, если он начнет с пустого элемента, все будет в порядке.

Ответ №2:

Вы можете просто использовать 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);
}
  

Комментарии:

1. Я почти уверен, что OP хотел выпадающий список со значениями, "",0,1,2,3.. так что, вероятно, так и должно быть myControl.Items.Add(j.ToString()) , и вы пропустили пустую строку.

2. Конечно… но более важным аспектом является то, что он может просто использовать цикл for для повторяющегося добавления элементов 0-99.

3. Согласен, но было бы лучшим ответом, если бы вы включили решение, которое фактически решало проблему, заданную OP. Также неплохо включить более общее решение.

4. Тогда обновлено более конкретным решением.

Ответ №3:

Если вы привязали список (массив, коллекцию и т.д.) в качестве источника данных к выпадающему списку (winforms? веб-формы?) всегда будут созданы элементы. Если вы не хотите добавлять каждый элемент вручную, вы можете сделать это с помощью кода:

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

Ответ №4:

Например, в 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") %>
  

Ответ №5:

Если это 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());
}
  

Ответ №6:

 ddl.DataSource = Enumerable.Range(1, 100);
ddl.DataBind();
  

Ответ №7:

 combo.Items.Add("")
for (int i = 0; i < 100; i  )
  combo.Items.Add(i)
  

Также рассмотрите возможность использования элемента управления NumericUpDown с максимальным значением 100. Это не даст вам пустого выбора, но, возможно, более удобный выбор для удобства использования.

Ответ №8:

Создайте утилиту для генерации ваших значений:

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

Комментарии:

1. В C # уже есть Range функция. ddl.Items.AddRange(Enumerable.Range(0, 100).Select (e => new ListItem(e.ToString())).ToArray());

2. @Magnus может быть, вам следует указать это в качестве ответа?

3. @Magnus Пожалуйста, опубликуйте это в качестве ответа, и я отмечу это как ответ, я думаю, что это самое элегантное решение! Спасибо всем за весь вклад.

4. @bumble_bee_tuna Я так и сделаю 🙂

5. В случае этого конкретного выпадающего списка прямое добавление элементов может быть приемлемым, но в целом источник данных, привязанный к выпадающему списку, обеспечивает большую гибкость. Мне также нравится предложение о перечислимом диапазоне, предложенное Магнусом. Отличная работа.

Ответ №9:

vb:

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