Создание пользовательской кнопки в ListView в ASP.NET - PullRequest
3 голосов
/ 24 февраля 2011

У меня есть страница Results.aspx, на которой отображаются результирующие записи, запрошенные с использованием объекта SqlDataSource через ListView.Я хочу добавить кнопку «Просмотр», которая будет отображаться рядом с каждой записью, и при щелчке я выведу меня на отдельную страницу, на которой будут отображаться сведения об этой записи.Как мне это сделать?

Редактировать

Я попробовал то, что вы сказали, цитронас, и вот что я придумал:

<td>
    <asp:CheckBox ID="CheckBox1" runat="server" />
</td>
<td>
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="ViewButtonClick" CommandArgument='<%# Eval("ServiceId") %>'>View</asp:LinkButton>
</td>

И вотметод, который я хочу вызвать:

protected void ViewButtonClick(object sender, CommandEventArgs e)
    {
        var serviceId = Convert.ToInt32(e.CommandArgument);

        ServiceToView = DataAccessLayer.Service.Select(new Service { ServiceId = serviceId });
        Server.Transfer("~/ViewService.aspx");
    }

К сожалению, на самом деле ничего не происходит ... я что-то упустил?

Редактировать - Исправлено

Я что-то упустил!У меня было CommandName, равное моему имени метода вместо OnCommand.Я вынул CommandName, сохранил бит аргумента и заменил CommandName на OnCommand.Теперь все работает, но для чего мне понадобится CommandName?

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Вы можете добавить LinkButton в ItemTemplate объекта ListView.
Привязать значение, которое идентифицирует каждую запись, к CommandArgument элемента LinkButton.
Подписаться на событие Command из LinkButton.Там у вас есть доступ к CommandEventArgs.CommandArgument

0 голосов
/ 08 мая 2014

То, что вы сделали, сработало, Шторм.Я решил пойти с предложением Citronas и поделиться своим ответом.

FIRST: В aspx я добавил LinkButton к своему ItemTemplate со своими собственным CommandName и CommandArgument.Я передал идентификатор своего предмета в качестве CommandArgument, чтобы позже я мог использовать его внутри своего сабвуфера.

<asp:LinkButton ID="lnkBtnAnswers" runat="server" CommandName="Answers"
     CommandArgument='<%# Eval("ID")%>'>Answers</asp:LinkButton>

SECOND: В коде позади я создал сабвуфер, который будет вызываться всякий раз, когда пользователь проводитдействие.Как обычно упоминается Citronas, вы используете здесь «Выбрать», «Добавить», «Редактировать» или «Удалить».Я решил создать «ответы».

Примечание: Обрабатывает MyControl.ItemCommand здесь очень важно, так как именно это подписывает вас на событие команды.

Protected Sub lvQuestions_Command(sender As Object, e As CommandEventArgs) Handles lvQuestions.ItemCommand
    If e.CommandName.ToLower() = "answers" Then
          hfSelectedQuestionID.Value = e.CommandArgument
    End If
End Sub

Готово!Теперь, поскольку каждая команда проходит через новую подпрограмму, важно проверить правильность имени commandName, чтобы вы могли выполнить соответствующее действие.Не забудьте использовать CommandArgument в ваших интересах.

...