Раскрывающийся список не отображается после привязки данных - PullRequest
0 голосов
/ 22 октября 2009

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

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 ();" решил проблему.

1 Ответ

1 голос
/ 24 октября 2009

При обратной передаче состояние представления повторно применяется + вы сказали, что пытаетесь загрузить значения снова. Я бы посоветовал разрешить 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); 
   }
}

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

using (DataView dv = dtProductGroup.DefaultView)
{

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

DataView dv = dtProductGroup.DefaultView;

Подробную информацию см. В документации MSDN об «использовании» и IDisposable .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...