Календарь, динамическая справка LinkButton CommandEventHandler Справка - PullRequest
0 голосов
/ 05 октября 2010

Я пытаюсь создать календарь, представляющий собой простой пользовательский интерфейс для отображения дат и дат для пользователей нашей системы. Я переопределил событие «DayRender» в Календаре, чтобы получить доступ к каждой ячейке, а затем вставил пару динамических элементов управления для отображения определенных данных. Дисплей органов управления работает отлично. Однако недавно я хотел добавить LinkButton с аргументами команды и захватить событие, чтобы запустить другую логику и изменить пользовательский интерфейс. Я получил LinkButton для правильного отображения, и он отображается как простой "" тег с назначенным идентификатором. Однако нажатие на ссылку ничего не делает, и кажется, что нормальная часть ссылки "href = '... javascript action ...'" не генерируется. У меня такое ощущение, что это все из-за того, что я добавляю элемент управления на этапе рендеринга дня в жизненном цикле страницы. Но если бы это было так, контроль, вероятно, вообще не был бы обнаружен.

Есть идеи, почему действие по щелчку еще не добавлено, а текст и все остальное добавлено? Код ниже.

Спасибо за ваше время

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        if (Schedule != null)
        {
            var dayReq = from day in Schedule
                         where day.RequiredDate == e.Day.Date
                         where day.RequiredQty != 0
                         select day;

            if (dayReq.FirstOrDefault() != null)
            {
                //Open the Date
                e.Cell.Controls.Add(new LiteralControl("<br /><div class=\"auth-sched-req\">Req Qty: <strong>" + String.Format("{0:#,#.###}", dayReq.FirstOrDefault().RequiredQty) + "</strong><br />Prom Date: "));

                //Create a link button for the promise date
                LinkButton lb = new LinkButton();
                lb.ID = dayReq.FirstOrDefault().ItemId.ToString();
                lb.Text = dayReq.FirstOrDefault().RequiredDate.ToShortDateString();
                lb.CommandName = "ShowPromise";
                lb.CommandArgument = dayReq.FirstOrDefault().ItemId.ToString();
                lb.Command +=new CommandEventHandler(lb_Command);
                e.Cell.Controls.Add(lb);

                //Close the Date
                e.Cell.Controls.Add(new LiteralControl("</div>"));
            }
        }
    }

    protected void lb_Command(Object sender, CommandEventArgs e)
    {
        //Do some magic here
        Response.Write(e.CommandArgument.ToString());
    }

Ответы [ 3 ]

0 голосов
/ 26 января 2011

Проверьте, установлено ли для AutoEventWireup значение true, т.е.

AutoEventWireup="true"
0 голосов
/ 07 апреля 2011

В итоге я пошел по другому маршруту с этим запросом.Ни одно из предложенных решений не сработало, и я так и не смог заставить его работать.Одним из вариантов, который мы рассмотрели, было создание пользовательской таблицы для создания элемента управления.Мы закончили тем, что изменили, где информация была изменена, и просто использовали элемент управления календаря в качестве механизма отображения.

Извините за задержку!

0 голосов
/ 05 октября 2010

попробуйте

<script type="text/javascript">
    function calendarClick(day) {
        document.getElementById('<%= hfValue.ClientID %>').value = day;
        document.getElementById('<%= ghostButton.ClientID %>').click();
    }
</script>
<asp:Button ID="ghostButton" runat="server" Style="display: none" OnClick="ghostButton_Click" />
<asp:HiddenField ID="hfValue" runat="server" />

код:

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    // ...
    e.Cell.Attributes["onclick"] = string.Format("calendarClick({0})", dayReq.FirstOrDefault().ItemId.ToString());
    // ...
}
protected void ghostButton_Click(object sender, EventArgs e1)
{
    string value = hfValue.Value;
    // ...
}
...