ASP.NET / DataItem из DataList после Postback имеет значение null

После обратной передачи (нажмите на кнопку) в моей форме ASP.NET все DataItem моей формы равны нулю. Почему? Что я должен сделать, чтобы получить содержимое DataList даже после обратной передачи?

protected void buttonAddRecord_Click(object sender, EventArgs e)
    {
        foreach (DataListItem item in listFields.Items)
        {
            // item.DataItem == null  WTF?
        }
    }

protected void Page_Load(object sender, EventArgs e)
    {
        BindFields();
    }

private void BindFields()
    {
        object setting = MySettings.GetSetting();

        if (!Null.IsNull(setting))
        {
            listFields.DataSource =     
                DataProvider.GetData(int.Parse(setting.ToString()));
            listFields.DataBind();
        }

        listFields.Visible = listFields.Items.Count > 0;
        emptyMessage.Visible = listFields.Items.Count == 0;
    }
10
задан asmo 20 August 2010 в 15:16
поделиться

3 ответа

Нашел свой ответ здесь .

Что сказал Джон, элементы источника данных доступны только при привязке данных. Они больше не доступны после начальная загрузка.

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

Точнее, я использовал HiddenField для хранения идентификатора в сообщениях, и я запрашиваю данные из базы данных вместо того, чтобы пытаться получить их из DataItem (который нельзя использовать вне события привязки данных).

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

9
ответ дан 3 December 2019 в 21:19
поделиться

Проверьте, действительно ли вы DataBind() DataList после каждого postback. Обычно вы получаете DataList, GridView, DropDownList (и другие Controls) пустыми после PostBack, когда вы не привязываете их снова.

1
ответ дан 3 December 2019 в 21:19
поделиться

DataItem доступен только при привязке данных.

Загрузить предшествует Щелкните , так что вы все равно перезаписываете свои данные.

Сделайте следующее:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindFields();
    }
}

Вы должны использовать DataSource (например, ObjectDataSource) для обработки DataBinding и Update / Insert.

Обновление / совет:

Использование PlaceHolders для привязки данных вызывает у вас проблемы. Вам следует рассмотреть возможность использования ListView, GridView, DataList или Repeater. Я уверен, что любой из них сделает то, что вы хотите, и вам придется меньше программировать. Используйте свое время, чтобы изучить их, вместо того, чтобы пытаться заставить это работать, это обречено на провал.

7
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: