Я устанавливаю DataSource моего повторителя в список (MyProducts — это простой класс, состоящий только из get/setters).
После этого и DataBind() я вижу в режиме отладки, что DataItem каждого Repeater.Items имеет значение null. При выполнении обратной передачи и попытке обновить MyProducts Repeater.Items[n].DataItem по-прежнему имеет значение null, и я не могу его использовать для выполнения своей работы.
Почему DataItem не устанавливается для каждого RepeaterItem, когда я привязываю данные к своему ретранслятору? Я не могу понять/погуглить. Все остальные аспекты моего кода работают правильно (вывод данных из MyProducts в aspx, используя, например:
<asp:TextBox runat="server" id="q" Text='<%# DataBinder.Eval(Container.DataItem, "Quantity")%>'></asp:TextBox>
Больше кода:
public class MyProducts
{
public string Number
{
get; set;
}
public decimal Price
{
get; set;
}
public decimal Quantity
{
get; set;
}
public decimal Total
{
get { return Quantity * Price; }
}
}
Генерация:
public List<MyProducts> TheProducts
{
get { // Invoking webservice, getting response as xml and converting it to a list of MyProducts }
}
Мой пользовательский элемент управления:
// Bind products in cart
r.DataSource = TheProducts;
r.DataBind();
// Debugging "r.Items[n].DataItem" now shows "null", eventhough all objects has been correctly binded
Изменить № 2, информацию об отладке. DataSource загружается правильно, но Repeater.Items[3].DataItem имеет значение null. Это должно иметь значение, верно? скриншот
Изменить № 3, теперь я понял, я думал, что DataItem всегда доступен, когда установлен DataSource, и не думал о включении полного кода (я пытался получить к нему доступ в Page_Load).
После того, как пользователь отредактировал значение количества, я хотел сохранить новое количество для MyProducts. Я решил эту проблему, поместив скрытое поле, которое содержит идентификатор MyProducts, чтобы я мог вручную найти его и получить оттуда объект MyProducts.
Спасибо emremp, Марку Авениусу и всем остальным, кто принял участие.