Выпадающий список Не отображается После привязки к данным

StackOverflow https://stackoverflow.com/questions/1608887

Вопрос

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

using (DataView dv = dtProductGroup.DefaultView)
{
        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
}

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

Я вижу две возможности:Элемент управления не отображает новые значения или значения очищаются.Я в растерянности, где искать возможные проблемы.

Редактировать

Я обнаружил проблему.Выпадающий список был встроен в Условную панель обновления.Простой вызов "UpdatePanel.Update();" решил проблему.

Это было полезно?

Решение

При обратной передаче viewstate применяется повторно + вы сказали, что пытаетесь снова загрузить значения.Я бы предложил позволить viewstate взять на себя всю ответственность за обратную отправку.Загружайте значения только при первом посещении страницы, добавляя if (!IsPostBack) вот так

using (DataView dv = dtProductGroup.DefaultView)
{
   if (! IsPostBack) {

        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
   }
}

Редактировать: Кроме того, ваш синтаксис гарантирует, что объект DataView, на который ссылается dv, будет удален при завершении работы блока кода.Мое второе предположение заключается в том, что это вызывает побочный эффект, который и вызывает проблему.

using (DataView dv = dtProductGroup.DefaultView)
{

Вместо этого опустите using и напишите обычную декларацию, подобную следующей (DataView будет удален вместе со всем остальным, когда страница будет готова к рендерингу, так что на самом деле нет никакой необходимости делать это самостоятельно).

DataView dv = dtProductGroup.DefaultView;

Смотрите на Документация MSDN об "использовании" и IDisposable для получения подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top