2015-04-23 86 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"); 
    } 
}