2015-04-23 72 views
1

我有一个日历控件,我点击一天给我一个JavaScript弹出窗口添加一个培训班。每天可能会有多个培训班。添加类是没有问题的。然后在另一个页面上,我已经得到了这个确切的日历控件,但是在每一天分别使用动态链接按钮填充了培训类。在点击链接按钮时,我想检索该培训班的ID,该培训班将用于填充标签,并在管理员为他/她的员工请求培训(插入到SQL中)时使用此ID作为参考。Onclick动态链接按钮没有触发

我已经尝试添加一个EventHandler,但这不是解雇。我试着对这个linkbutton使用Click属性(但不能调用属性的方法)......我不确定是否错过了事件处理程序没有发射的东西,有没有人可以帮我解决这个问题?

这是我做了什么: DayRendering日历控件的:

protected void calSchedule_DayRender(object sender, DayRenderEventArgs e) 
    { 
     bool result = false; 

     string filterstring = "SELECT tos.[ID], sc.ServiceCenter, tos.Description " + 
           "FROM [SOS].[dbo].[TrainingOfficerSchedule] tos " + 
           "INNER JOIN [dbo].[TrainingOfficerServiceCenters] sc " + 
           "on tos.ServiceCenterRef = sc.ID " + 
           "WHERE TrainingDate = @TrainingDate"; 

     cn = new SqlConnection(GetConnectionString()); 
     SqlCommand myCmd = new SqlCommand(filterstring, cn); 
     myCmd.Parameters.AddWithValue("@TrainingDate", e.Day.Date.ToShortDateString()); 

     cn.Open(); 
     SqlDataReader myReader = myCmd.ExecuteReader(); 

     if (myReader.HasRows) 
     { 
      while (myReader.Read()) 
      { 
       string training = myReader["ServiceCenter"].ToString() + " - " + myReader["Description"].ToString(); 

       LinkButton lnk = new LinkButton(); 
       lnk.ID = myReader["ID"].ToString(); 
       lnk.ForeColor = Color.FromArgb(64, 64, 64); 
       lnk.BackColor = Color.FromArgb(192, 192, 192); 

       lnk.Attributes.Add("onclick", "return getItems();"); 
       lnk.Click += new EventHandler(lnk_Click); 
        //lnk.Attributes.Add("onClick", "return getItems();"); 
        //lnk.Attributes.Add("OnClientClick", "return getItems();"); 
        //lnk.Attributes.Add("onclick", jsMethod(Convert.ToInt32(myReader["ID"]))); 
        //lnk.Click += new EventHandler(this.lnk_Click); 
        //lnk.Atributes.Add("runat", "server"); 
        //lnk.Attributes.Add("onclick", jsMethod(myReader["ID"].ToString())); 
       lnk.Text = training + "<br/><br/>"; 
       lnk.Style.Add("cursor", "pointer"); 
       e.Cell.Controls.Add(lnk); 
      } 
     } 
     cn.Close(); 
    } 

事件处理程序上LinkBut​​ton的点击,当火:

public void lnk_Click(object sender, EventArgs e) 
    { 
     string ctrlId = ((Control)sender).ID; 
     txtMManagerName.Text = ctrlId; 
     this.Page.ClientScript.RegisterStartupScript(this.GetType(), "popSchedular", "showSchedular();", true); 
    } 

有可能什么我做错了什么?

+0

这个问题可能是因为getItems返回false,从而导致代码从火灾中解脱出来。首先注释掉这行lnk.Attributes.Add(“onclick”,“return getItems();”);看看它是否不会开火。 – Bayeni

+0

@ Bayeni,谢谢我删除了这行,但它仍然没有发射.... – Kerieks

回答

0

放下PlaceHolder要显示的链接按钮,然后尝试。

<asp:PlaceHolder ID="ph" runat="server" /> 


LinkButton lnk = new LinkButton(); 
      lnk.ID = myReader["ID"].ToString(); 
      lnk.ForeColor = Color.FromArgb(64, 64, 64); 
      lnk.BackColor = Color.FromArgb(192, 192, 192); 
      lnk.Attributes.Add("onclick", "return getItems();"); 
      lnk.Click += new EventHandler(lnk_Click); 
      lnk.Text = training + "<br/><br/>"; 
      lnk.Style.Add("cursor", "pointer"); 
      ph.Controls.Add(lnk); 

protected void lnk_Click(object sender, EventArgs e) 
{ 
    string ctrlId = ((Control)sender).ID; 
    txtMManagerName.Text = ctrlId; 
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "popSchedular", "showSchedular();", true); 
} 
+0

我不认为问题是显示链接按钮。已经在他的代码中显示链接“e.Cell.Controls.Add(lnk);”。 – Bayeni

+0

@Dexterity,谢谢,但Linkbutton已经显示。唯一的问题是它不是解雇事件处理程序...我想看看是否有可能直接从属性调用方法...谢谢 – Kerieks

+0

你检查了浏览器中的LinkBut​​ton并检查“onclick =返回getItems();“事件显示与否?和@Bayeni是对的,有可能getItems返回false。 – Keval

0

我以前有过动态控件。用相同的对象引用创建多个项目似乎弄糟了。尝试创建一个从LinkBut​​ton继承的类,并在读取循环中使用它。

public class myButton : LinkButton 
{ 
    public myButton(SqlCommand sqlCmd) 
    { 
     var myReader = (SqlDataReader) sqlCmd.ExecuteReader(); 
     var training = myReader["ServiceCenter"].ToString() + " - " + myReader["Description"].ToString(); 
     ID =myReader["ID"].ToString(); 
     ForeColor = Color.FromArgb(64, 64, 64); 
     BackColor = Color.FromArgb(192, 192, 192); 

     Attributes.Add("onclick", "return getItems();"); 
     Click += new EventHandler(lnk_Click); 
     Text = training + "<br/><br/>"; 
     Style.Add("cursor", "pointer"); 
    } 
}