#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