Почему в раскрывающемся списке сначала не отображается мой пустой элемент? Вот что у меня есть
drpList.Items.Add(New ListItem("", ""))
With drpList
.DataSource = myController.GetList(userid)
.DataTextField = "Name"
.DataValueField = "ID"
.DataBind()
End With
Изменить ~ Я привязываюсь к списку Generig, может ли это быть виновником?





похоже, что вы добавляете пустой элемент, а затем выполняете привязку данных, в результате чего список очищается; попробуйте вставить пустой элемент после привязки данных
когда я это сделаю, внизу появится пустая строка.
Вы можете указать индекс для вставки. Посмотрите на решение JasonS.
@ [Саиф Хан]: и если это не сработает, вставьте пустую строку в свой источник данных, затем привяжите данные
Связывание данных происходит после того, как вы добавили пустой элемент списка, и он заменяет то, что уже есть, вам нужно добавить пустой элемент в начало списка с вашего контроллера или добавить его после привязки данных.
Обновлено:
После быстрого поиска в Google, начиная с ASP.Net 2.0, появляется свойство «AppendDataBoundItems» true, которое вы можете установить для ... добавления элементов привязки к данным.
подробности см.
http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281 или
Можно подумать, что вам нужно следить за тем, чтобы раскрывающийся список увеличивался после каждой обратной передачи, добавляя одни и те же данные снова и снова.
Пустой элемент отсутствует или просто не выбран?
Это сработало бы, если бы в вашей разметке .aspx был пустой, а затем привязанный в коде позади.
Выполните привязку данных, а затем добавьте следующее:
Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)
После привязки данных:
drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;
В качестве альтернативы вы можете создать экземпляр ListItem, установить для его свойства Selected значение true, а затем вставить его в drpList, как указано выше.
Я думаю, что лучший способ - сначала вставить пустой элемент, а затем привязать данные, как вы это делали. Однако вам необходимо установить свойство AppendDataBoundItems элемента управления списком.
Мы используем следующий метод для привязки любого источника данных к любому элементу управления списком ...
public static void BindList(ListControl list, IEnumerable datasource, string valueName, string textName)
{
list.Items.Clear();
list.Items.Add("", "");
list.AppendDataBoundItems = true;
list.DataValueField = valueName;
list.DataTextField = textName;
list.DataSource = datasource;
list.DataBind();
}
Как сказал "Венчик", трюк находится в свойстве "AppendDataBoundItems"
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList1.AppendDataBoundItems = true;
DropDownList1.Items.Insert(0, new ListItem(String.Empty, String.Empty));
DropDownList1.SelectedIndex = 0;
}
}
Спасибо "Венчик"
просто
в конце концов
ddlProducer.Items.Insert(0, "");
Вы можете использовать AppendDataBoundItems=true, чтобы легко добавить:
<asp:DropDownList ID = "drpList" AppendDataBoundItems = "true" runat = "server">
<asp:ListItem Text = "" Value = "" />
</asp:DropDownList>
VS не любит тег <br />, и у меня он работает без него. Это такой чистый вариант, я не знаю, почему у него нет больше голосов.
Работал как шарм. Спасибо за дизайнерское решение.
Не забудьте установить Selected = "true"
ddlCategory.DataSource = ds;ddlCategory.DataTextField = "CatName";ddlCategory.DataValueField = "CatID";
Cách 1:
ddlCategory.Items.Add(new ListItem("--please select--", "-1"));ddlCategory.AppendDataBoundItems = true;ddlCategory.SelectedIndex = -1;
ddlCategory.DataBind();
Cách 2:
ddlCategory.Items.Insert(0, new ListItem("-- please select --", "0"));
(Проверено ОК)
У вас также может быть объединение пустого выбора с выбором, у которого есть контент:
select '' value, '' name
union
select value, name from mytable
Оглядываясь назад, я бы рекомендовал этот метод только в качестве альтернативы. Мне нравится это событие ради гибкости (OnDataBound = "mydropdown_DataBound"), но в моем текущем случае я использую (AppendDataBoundItems = "true") для простоты.
Это относится к: stackoverflow.com/questions/983716/…