[英]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
他給出的示例涉及一個LinkButton,但是對於下拉控件來修改它應該不難。
你也可以這樣做。 將您的數據轉換為一個對象變量,然后將其數據轉換為選擇標記(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.