none
如何在动态添加控件中加入事件 RRS feed

  • 问题

  •         protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
            {
                        if (e.Day.Date.Equals(new DateTime(lidate[i].Year, lidate[i].Month, lidate[i].Day)))
                        {
                            e.Cell.Controls.Add(new LiteralControl("<br /><font color=\"Green\">" + string.Format("¥{0:N}", liint[i]) + "</font><br />"));
                            LinkButton lb = new LinkButton();
                            lb.ID = "lbutton" + i.ToString();
                            lb.Text = "预订";
                            lb.Click += new EventHandler(LinkButton1_Click);
                            e.Cell.Controls.Add(lb);
                        }
             }
    无法成功向lb中添加事件

    2011年12月22日 2:38

答案

  • 試試看這樣是不是你要的結果。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication5
    {
        public partial class WebForm13 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Request.Form["__EVENTTARGET"].Contains("LinkButton"))
                {
                    LinkButton_Click(Request.Form["__EVENTARGUMENT"]);
                }
            }       
    
            protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
            {
                LinkButton lbDynamic = new LinkButton();
                lbDynamic.ID = "LinkButton" + e.Day.Date.ToString("MMdd");
                lbDynamic.Text = "請按此";
                // {0}為引發PostBack的控制項ID,{1}參數為要傳遞的參數
                lbDynamic.Attributes.Add("href", string.Format(@"javascript:__doPostBack('{0}','{1}')", "LinkButton" 
                                                    + e.Day.Date.ToString("MMdd"), "參數=" + e.Day.Date.ToString("MMdd")));
                e.Cell.Controls.Add(lbDynamic);
                foreach (Control c in Calendar1.Controls)
                {
                    Response.Write(c.ID + "<br/>");
                }
            }
    
            void LinkButton_Click(string s)
            {
                Response.Write(s);
            }
        }
    }
    

    參考資料:http://itgroup.blueshop.com.tw/jeff377/blog?n=convew&i=2027,ASP.NET魔法學院


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年12月22日 8:18

全部回复

  • 試試看把動態控制項的Event Handler寫到Page Init事件中。

    http://www.dotblogs.com.tw/jeff377/archive/2008/03/17/1738.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年12月22日 2:45
  • 无效

    2011年12月22日 3:08
  • 剛找到MSDN上有關日曆控制項的一些注意事項,其中提到:

    因為呈現 Calendar 控制項時會引發 DayRender 事件,所以您不可以加入也會引發事件的控制項,例如 LinkButton。 
    您只能夠加入靜態控制項,例如 System.Web.UI.LiteralControl、Label、Image 以及 HyperLink。


    http://msdn.microsoft.com/zh-tw/library/2skfc4wd

     

    不過你可以用下列這種方式來做變通:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication5
    {
        public partial class WebForm13 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Request.Form["__EVENTTARGET"] == "LinkButton1")
                {
                    lb_Click(null, null);
                }
            }
    
            protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
            {
                if (e.Day.IsToday)
                {
                    e.Cell.Controls.Add(new LiteralControl("<br /><font color=\"Green\">" + string.Format("¥{0:N}", 100) + "</font><br />"));
                    LinkButton lb = new LinkButton();
                    lb.ID = "LinkButton1";
                    lb.Text = "预订";
                    lb.Attributes.Add("href", "javascript:__doPostBack('LinkButton1','')");
                    e.Cell.Controls.Add(lb);
                }
            }
    
            void lb_Click(object sender, EventArgs e)
            {
                Response.Write("Link Button Click");
            }
        }
    }
    

    http://forums.asp.net/t/1116063.aspx/1?Add+linkbutton+dynamically+in+calendar+dayrender+event


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年12月22日 3:54
  • lb.Attributes.Add("href", "javascript:__doPostBack('LinkButton1','')");

    追问:如何向上句中的“:__doPostBack('LinkButton1','')”传入参数!

    2011年12月22日 6:32
  • 試試看這樣是不是你要的結果。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication5
    {
        public partial class WebForm13 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Request.Form["__EVENTTARGET"].Contains("LinkButton"))
                {
                    LinkButton_Click(Request.Form["__EVENTARGUMENT"]);
                }
            }       
    
            protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
            {
                LinkButton lbDynamic = new LinkButton();
                lbDynamic.ID = "LinkButton" + e.Day.Date.ToString("MMdd");
                lbDynamic.Text = "請按此";
                // {0}為引發PostBack的控制項ID,{1}參數為要傳遞的參數
                lbDynamic.Attributes.Add("href", string.Format(@"javascript:__doPostBack('{0}','{1}')", "LinkButton" 
                                                    + e.Day.Date.ToString("MMdd"), "參數=" + e.Day.Date.ToString("MMdd")));
                e.Cell.Controls.Add(lbDynamic);
                foreach (Control c in Calendar1.Controls)
                {
                    Response.Write(c.ID + "<br/>");
                }
            }
    
            void LinkButton_Click(string s)
            {
                Response.Write(s);
            }
        }
    }
    

    參考資料:http://itgroup.blueshop.com.tw/jeff377/blog?n=convew&i=2027,ASP.NET魔法學院


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年12月22日 8:18
  • 可以试试异步调用.


    GetZ 不抛弃,不放弃.
    • 已建议为答案 zongTest 2011年12月30日 15:26
    2011年12月24日 8:05