C# 如何在asp.net页面加载中调用选定的索引更改事件
我有一个asp日历视图,在该视图中,我正在对日历日期的选定索引生成动态控制。因此,我面临一个回发问题,因为动态控件在单击后会分散,所以我需要将此选定的索引更改事件调用到页面加载中,以便动态控件保持其状态C# 如何在asp.net页面加载中调用选定的索引更改事件,c#,sql,asp.net,C#,Sql,Asp.net,我有一个asp日历视图,在该视图中,我正在对日历日期的选定索引生成动态控制。因此,我面临一个回发问题,因为动态控件在单击后会分散,所以我需要将此选定的索引更改事件调用到页面加载中,以便动态控件保持其状态 protected void Calendar1_SelectionChanged1(object sender, EventArgs e) { try { DateTime sDate = new DateTime(); sDate = Cale
protected void Calendar1_SelectionChanged1(object sender, EventArgs e)
{
try
{
DateTime sDate = new DateTime();
sDate = Calendar1.SelectedDate;
sDay = sDate.ToString("MM/dd/yyyy");
string doc = ddlDoctor.SelectedValue.ToString();
DataTable dt = tsbll.GetAvailableSlotsbyDocAndDate(doc, sDay);
foreach (DataRow dr in dt.Rows)
{
Button label = new Button();
label.Text = dr["SlotTime"].ToString();
//label.Style["Left"] = "20px";
label.CssClass = "btn btn-primary";
//label.CssClass = "background - color: #19bc49;";
label.Click += new EventHandler(labelClick);
pnlLabel.Controls.Add(label);
}
}
catch (Exception ex) { throw new Exception(ex.ToString()); }
}
您不必调用
页面加载
中的SelectedIndexChanged
事件处理程序。您必须调用生成动态控件的方法。可以从Page\u Load
和事件处理程序调用此方法
protected void GenerateDocSlotLabels(string doc, DateTime day)
{
string sDay = day.ToShortDateString();
DataTable dt = tsbll.GetAvailableSlotsbyDocAndDate(doc, sDay);
foreach (DataRow dr in dt.Rows)
{
Button label = new Button();
label.Text = dr["SlotTime"].ToString();
//label.Style["Left"] = "20px";
label.CssClass = "btn btn-primary";
//label.CssClass = "background - color: #19bc49;";
label.Click += new EventHandler(labelClick);
pnlLabel.Controls.Add(label);
}
}
现在从两个事件处理程序调用此函数。例如:
protected void Calendar1_SelectionChanged1(object sender, EventArgs e)
{
DateTime sDate = Calendar1.SelectedDate;
string doc = ddlDoctor.SelectedValue.ToString();
GenerateDocSlotLabels(doc, sDate);
}
旁注:我已经删除了你的
捕获
,因为它没有任何用处。应使用throw
notthrow ex
重新引发异常,以保留原始堆栈跟踪。如果在异常处理程序中无事可做,则不要捕获异常。与您的问题无关,但处理异常的方式毫无意义。如果您没有向异常对象添加任何新内容,那么甚至不用重新抛出它。您不必调用页面加载中的SelectedIndexChanged
事件处理程序。您必须调用生成动态控件的方法。此方法可以从Page\u Load
和事件处理程序中调用。正如Tim所说,将此功能移动到一个单独的方法中,以便Page\u Load和selectedindexchanged事件处理程序都可以重新使用它。然后从这两个地方可以调用同一段代码。这是一个相当基本的代码重用原则。实际上我还没有完成我的代码,我稍后会传递异常消息。谢谢,谢谢,我只是想得不好。这里我面临的问题是,我正在使用一个动态按钮,它是在点击asp日历日期时生成的,我想在动态控件的点击事件上编写代码,但现在当我点击按钮时,按钮消失了。请帮助…@KhaleelR:您是否使用了我上次编辑之前使用的Page\u Load
代码(带有是(!IsPostBack)
)?@KhaleelR:嗯,目前您甚至不需要Calendar1\u SelectionChanged1
事件处理程序,因为代码已经在Page\u Load
中执行。我改变了它,现在的问题是我需要双击日历来显示动态控件。
protected void Page_Load(object sender, EventArgs e)
{
DateTime sDate = Calendar1.SelectedDate;
string doc = ddlDoctor.SelectedValue.ToString();
GenerateDocSlotLabels(doc, sDate);
}