После обратной передачи (нажмите на кнопку) в моей форме 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;
}
Нашел свой ответ здесь .
Что сказал Джон, элементы источника данных доступны только при привязке данных. Они больше не доступны после начальная загрузка.
Вы можете подумать о предмете или коллекция объектов, представляющая данные на экране, которые вы обновляете с помощью сетка, затем сохраните изменения из этого к базам данных.
Точнее, я использовал HiddenField для хранения идентификатора в сообщениях, и я запрашиваю данные из базы данных вместо того, чтобы пытаться получить их из DataItem (который нельзя использовать вне события привязки данных).
Элемент управления HiddenField используется для сохранить значение, которое должно быть сохраняется через сообщения на сервер.
Проверьте, действительно ли вы DataBind() DataList после каждого postback. Обычно вы получаете DataList, GridView, DropDownList (и другие Controls) пустыми после PostBack, когда вы не привязываете их снова.
DataItem
доступен только при привязке данных.
Загрузить
предшествует Щелкните
, так что вы все равно перезаписываете свои данные.
Сделайте следующее:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindFields();
}
}
Вы должны использовать DataSource (например, ObjectDataSource) для обработки DataBinding и Update / Insert.
Обновление / совет:
Использование PlaceHolders для привязки данных вызывает у вас проблемы. Вам следует рассмотреть возможность использования ListView, GridView, DataList или Repeater. Я уверен, что любой из них сделает то, что вы хотите, и вам придется меньше программировать. Используйте свое время, чтобы изучить их, вместо того, чтобы пытаться заставить это работать, это обречено на провал.