#c# #asp.net #.net #repeater
Вопрос:
Я изо всех сил пытаюсь сформулировать это правильно, так как я не совсем уверен, в чем проблема, но я попробую.
У меня есть список событий в ретрансляторе. У меня есть флажок над этим списком, который выполняет обратную передачу и отображает события с истекшим сроком действия.
Когда он отправляет ответную информацию, в ретрансляторе есть правильная информация, но когда я нажимаю «Изменить» (ItemCommand), у него неверный идентификатор события (вместо этого он показывает идентификатор события перед обратной передачей).
Я не уверен, что с ретрансляторами происходит какое-то сопоставление идентификаторов, которое выходит за рамки моих знаний.
Вот некоторые из моих кодов, которые, надеюсь, немного прояснят ситуацию:
protected void chkShowExpired_CheckedChanged(object sender, EventArgs e)
{
rptEvents.DataSource = Events.GetFiltered(null, null, chkShowExpired.Checked, null, null, null, null, "");
rptEvents.DataBind();
}
protected void rptEvents_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "DeleteEvent":
...
break;
case "EditEvent":
...
break;
}
}
Ответ №1:
Ну, событие с флажком сработает до события изменения индекса. Таким образом, в событии с флажком вы не можете напрямую использовать элемент управления для получения индекса строки/выбранного. Вам придется подождать, пока не сработает выбранное событие повторителя индекса.
Тем не менее, я помещаю кнопки, флажки и все виды элементов управления в этот повторитель.
Что я делаю, так это даже не заморачиваюсь с моделью событий повторителя.
просто сделайте это в своем событии флажка, или событии кнопки, или в любом другом
protected void cmdUpdate_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
RepeaterItem rItem = (RepeaterItem)btn.Parent;
TextBox tBox = (Textbox)rItem.FindControl("txtHotelName");
response.Write("hotel name = " tBox.Text);
}
Другими словами, просто выдерните отправителя. Теперь это становится очевидным, Джейн asp.net код и приложения. Вам не нужно беспокоиться об использовании режима событий ретранслятора и запуске, скажем, индексированного измененного события ретранслятора.
Кроме того, еще один классный трюк.
Когда вы устанавливаете флажок, раскрывающийся список, кнопку?
Ну, так как он находится внутри ретранслятора, то мы не можем сделать все это замечательно, чтобы открыть таблицу свойств или, что еще проще, скажем, дважды щелкнуть по элементу управления, который переходит к коду позади.
Но вы МОЖЕТЕ сделать этот классный трюк — просто используйте intel-sense:
например, это:
Просто введите название события в разметке, и когда вы нажмете знак»=», intel-sense предоставит вам возможность создать событие, подобное этому:
Итак, теперь вы можете нажать на создать новое событие — кажется, что ничего не произошло, но если вы перейдете к коду позади, вы увидите событие buttion (в этом примере).
Итак, взяв отправителя, а затем отправителя.родителя (который является элементом повторителя), мы действительно не заботимся о том, чтобы произошло событие модели событий повторителя «изменение индекса» — вам действительно все равно, так как вы получаете/имеете/видите полное использование элемента строки повторителя с помощью .parent отправителя.
Конечный результат? Вы вроде как просто кодируете эти элементы управления и их события, как и любой другой элемент управления за пределами ретранслятора.
И как только у вас появятся руки на этом повторителе (строке), вы сможете свободно делать все, что захотите.