DataBind DropDownList работает, но не отображается в коде

Я работаю над веб-страницами, на которых определен ASP DropDownList, и при загрузке страницы источник данных привязан к нему через DataSource.DataBind(). Когда я просматриваю код, в раскрывающемся списке ничего не отображается, но когда страница действительно отображается, в списке есть элементы. Когда именно DataBind() применяется к элементу управления?

Проблема в том, что некоторые значения, возвращаемые серверной частью SQL, имеют нулевой текст, поэтому в раскрывающемся списке для этой строки ничего не отображается. Я хочу просто использовать значение как текст, но только если текст равен нулю. И когда я помещаю код в цикл и делаю это сразу после DataBind(), в раскрывающемся списке в этой точке кода ничего нет.

Спасибо!


person Greg    schedule 17.03.2011    source источник


Ответы (3)


Лучший вариант для вашего конкретного примера - сделать то, что сказал kd7, и изменить ваш запрос. Однако, если вам когда-нибудь понадобится внести другие изменения в элементы, вы можете получить к ним доступ в событии DataBound в DropDownList. MSDN. Это событие срабатывает после привязки.

person Zach Green    schedule 17.03.2011
comment
Спасибо, это то, что я искал. Работает хорошо! Причина, по которой я хочу сделать это таким образом, заключается в том, что было бы ДЕЙСТВИТЕЛЬНО сложно оставаться в курсе всех возможностей в будущем для всех комбинаций элемента/значения. Я знаю, что это не идеально, но я предпочел бы сделать это таким образом, чем проводить дни глубоко в очень большой базе данных, о которой я мало что знаю, чтобы охватить все. - person Greg; 17.03.2011

Ты мог бы

а) Измените запрос к базе данных, чтобы исключить нулевые значения

or

b) Перед привязкой данных просмотрите возвращаемые данные и удалите ненужные значения.

person Ta01    schedule 17.03.2011

Вы можете просто использовать LINQ для данных, прежде чем назначать их для создания нового типа на лету с данными, расположенными так, как вы хотите. Вот краткий пример:

// This simulates the data you get from the DB
List<SomeObject> lstData = new List<SomeObject>();
lstData.Add(new SomeObject() { ID = "1", Text = "One" });
lstData.Add(new SomeObject() { ID = "2", Text = "" });
lstData.Add(new SomeObject() { ID = "3", Text = "Three" });

// This will take your data and create a new version of it substituting the
// ID field into the Text field when the Text is null or empty.
yourDropDownList.DataSource = lstData.Select(i => new {
         ID = i.ID,
         Text = string.IsNullOrEmpty(i.Text) ? i.ID : i.Text }).ToList();

// Then just databind
yourDropDownList.DataBind();

DropDownList будет иметь следующие элементы:

One
2
Three
person Kelsey    schedule 17.03.2011