簡體   English   中英

Asp.net日歷控件中的DropDownList

[英]DropDownList inside an Asp.net Calendar Control

是否可以在日歷日內為asp.net Calendar控件添加DropDownList ,然后將其綁定到SelectedIndexChanged事件?

我可以在我想要的那天添加DropDownList ,但是我無法將它綁定到事件中。 我已經看到它在Calendar控件中的LinkButton完成,但DropDownList沒有。

當然有可能我寫了關於圖像按鈕和鏈接按鈕的文章,請按照相同的表格在這里: http ://weblogs.sqlteam.com/jhermiz/archive/2007/12/10/Cool-Tricks-With-The-ASP.net- Calendar.aspx

編寫事件時,只需指定該事件的Handle

編輯

在考慮了這個之后,由於asp.net生命周期的運行方式以及它如何處理DayRender事件,這實際上可能無法實現。

即使你做了一些這樣的事情:

protected void Calendar1_Render(object sender, DayRenderEventArgs e)
{
    if (e.Day.IsWeekend)
    {
        DropDownList d = new DropDownList();
        d.ID = "bah" + e.Day.Date.ToShortDateString();
        d.AutoPostBack = true;
        d.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
        d.Items.Add("A");
        d.Items.Add("B");
        d.Items.Add("C");
        e.Cell.Controls.Add(d);
    }
}

這不起作用,因為頁面加載事件已經在每天渲染時觸發,因此即使設置Autopostback=true不會起作用。

此外,即使您將新的EventHandler分配給動態控件,它也不會像在這種情況下那樣工作:

d.SelectedIndexChanged += new EventHandler(yourMethod);

我能想出的唯一可能有效的方法是:

 protected void Calendar1_Render(object sender, DayRenderEventArgs e)
        {
            if (e.Day.IsWeekend)
            {
                DropDownList d = new DropDownList();
                d.ID = "bah" + e.Day.Date.ToShortDateString();
                d.Items.Add("A");
                d.Items.Add("B");
                d.Items.Add("C");
                d.Attributes.Add("onchange", "__doPostBack();");
                e.Cell.Controls.Add(d);
            }
        }

問題是,這不會觸發您的服務器事件,它只會觸發回發,但它會讓您知道它可以通過某些屬性和客戶端腳本來觸發它。 您可以將服務器方法更改為客戶端方法嗎? 如果是這樣,那么你可以用客戶端方法的名稱替換__doPostBack()

不幸的是,我不是ASP.net的專家,我在其他很多東西上做了很多,但是當涉及到Calendar控件時,這個信息非常可靠,我過去經常使用它並達到了我的目的。由於其局限性而停止使用它。

祝好運。

有趣。 我不知道這個限制,但找到了一個涉及使用客戶端事件處理的解決方法。 根據作者的說法,它涉及1)在DayRender事件中添加靜態控件; 2)使其行為像具有事件的動態控件; 3)傳遞數據以識別單擊了哪個按鈕。

這是鏈接: http//www.aarongoldenthal.com/post/2009/03/31/Create-Dynamic-Buttons-in-an-ASPNET-Calendar.aspx

他給出的示例涉及一個LinkBut​​ton,但是對於下拉控件來修改它應該不難。

你也可以這樣做。 將您的數據轉換為一個對象變量,然后將其數據轉換為選擇標記(html中的下拉列表標記),然后在您的日歷日中添加該控件。

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    stringBuilder matrix = new stringBuilder();
    var SemList = (from row in dt.AsEnumerable()                                    
                  select new
                  {
                   SemName = row.Field<string>("SemName"),
                   SemID = row.Field<string>("SemID")
                  });

    if (SemList != null)
    {
        Matrix.Append("<select ID='sem_" + dt.Rows[k]["ActualCMID"].ToString() + "' runat='server' width='100px' onchange='" + Server.HtmlEncode("javascript:BindSpecialization('" + dv.ToTable().Rows[k]["ActualCMID"].ToString() + "')").ToString() + "'>");
        Matrix.Append("<option value='0'>---Select---</option>");
        foreach (var sem in SemList)
        {
           Matrix.Append("<option value='" + sem.SemID + "'>" + sem.SemName + "</option>");
        }
        Matrix.Append("</select>");
    }
    e.Cell.Controls.Add(new LiteralControl(Matrix.ToString()));
}

我希望它對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM