Button created dynamically but the event created for them is not firing

时间:2015-09-01 21:47:12

标签: c# asp.net

I am creating button dynamically using for loop and i want to get the text of any button which i click and display it into the label. i have tried the following code which creates buttons dynamically and gets the weeks of the month on clicking find button. On clicking the button it does not give any response and doees not trigger the event created:

c#

protected void _btnFind_Click(object sender, EventArgs e)
{

        int month = Convert.ToInt32(_cmbMonths.SelectedValue);
        int year = Convert.ToInt32(_cmbYears.SelectedValue);
        var cal = System.Globalization.CultureInfo.CurrentCulture.Calendar;
        IEnumerable<int> daysInMonth = Enumerable.Range(1, cal.GetDaysInMonth(year, month));

        List<Tuple<int, DateTime, DateTime>> listOfWorkWeeks = daysInMonth
            .Select(day => new DateTime(year, month, day))
            .GroupBy(d => cal.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday))
            .Select(g => Tuple.Create(g.Key, g.First(), g.Last(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday)))
            .ToList();

        // Item1 = week in year, Item2 = first day, Item3 = last working day
        int weekNum = 1;
        foreach (var weekGroup in listOfWorkWeeks)
        {

            //lnk.Text = "Week " + weekNum;
            Button lnk = new Button();

            lnk.Text = "Week " + weekNum++ + " (" + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month) +
                " " + weekGroup.Item2.Day + " to " +
                System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month) + " " +
                weekGroup.Item3.Day + ")";
            lnk.Click += new EventHandler(lnk_Click);

            Panel1.Controls.Add(lnk);
            Panel1.Controls.Add(new LiteralControl("<br/><br/>"));

        }           
}

void lnk_Click(object sender, EventArgs e)
{
    Button but = sender as Button;
    Label1.Text = but.Text;
}

aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Year&nbsp<asp:DropDownList ID="_cmbYears" runat="server"></asp:DropDownList>
        Month&nbsp<asp:DropDownList ID="_cmbMonths" runat="server">
            <asp:ListItem Value="1">January</asp:ListItem>
            <asp:ListItem Value="2">February</asp:ListItem>
            <asp:ListItem Value="3">March</asp:ListItem>
            <asp:ListItem Value="4">April</asp:ListItem>
            <asp:ListItem Value="5">May</asp:ListItem>
            <asp:ListItem Value="6">June</asp:ListItem>
            <asp:ListItem Value="7">July</asp:ListItem>
            <asp:ListItem Value="8">August</asp:ListItem>
            <asp:ListItem Value="9">September</asp:ListItem>
            <asp:ListItem Value="10">October</asp:ListItem>
            <asp:ListItem Value="11">Novermber</asp:ListItem>
            <asp:ListItem Value="12">December</asp:ListItem>
        </asp:DropDownList>
        &nbsp<asp:Button ID="_btnFind" runat="server" Text="Find" OnClick="_btnFind_Click"/>
    </div>
        <br />
        <asp:Panel ID="Panel1" runat="server">

        </asp:Panel>
        <br />
        <br />
        <b><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></b>
    </form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您正在foreach中创建控件。 每个人都应该有一个唯一的ID。

相关问题