2011-01-31 111 views
0

我有一個名爲Links的表。 兩個存儲過程稱爲sp_InsertLinks,sp_GetLinks。Web部件按鈕單擊

我有一個簡單的webpart,它接受兩個參數並將其添加到SQL Table調用鏈接中。

在第一個界面中,它顯示數據庫中的值列表和一個按鈕以添加列表。

當我點擊鏈接時,它會顯示下一個界面,我可以在其中添加鏈接名稱的Txtbox和鏈接URL的Txtbox。

而且當我提交這個頁面正在加載正常sharepoint生命週期的事件序列。

而我無法將新鏈接添加到頁面中,因爲按鈕單擊方法永遠不會被觸發。

請問有人可以看看這個嗎?

的代碼是:

using System; 
using System.Runtime.InteropServices; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Serialization; 
using System.Text ; 
using System.Data ; 
using System.Data.SqlClient; 
using System.Drawing; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.WebControls; 
using Microsoft.SharePoint.WebPartPages; 

namespace ContextMenuOptionsUsingJQuery 
{ 
    [Guid("7a3a52d4-9ad6-44b2-b96f-852da1a95371")] 
    public class ContextMenuOptionsUsingJQuery : System.Web.UI.WebControls.WebParts.WebPart 
    { 

     SqlConnection con; 
     SqlCommand cmd; 
     SqlDataReader dr; 
     string Con_string = string.Empty; 
     Button btnAddLink; 
     Button btnAddNewLink; 
     StringBuilder outputDisplay; 
     TextBox txtLink; 
     TextBox txtLinkUrl; 
     Label lblDisplay = new Label(); 

     public ContextMenuOptionsUsingJQuery() 
     { 

     } 



     protected override void CreateChildControls() 
     { 
      try 
      { 

       // Getting the Connection 

       ConnectionMethod(); 

       // Calling the Appropraite Method or stored Procedures 

       RefreshData(); 



       // Adding a New Link though the button 

        btnAddLink = new Button(); 
        btnAddLink.Text = "Add Link"; 
        btnAddLink.Click += new EventHandler(btn_AddLink); 

        //New item 

        Controls.Add(btnAddLink); 



      } 
      catch (Exception e) 
      { 
       Label l = new Label(); 
       l.Text = e.StackTrace; 
       Controls.Add(l); 
      }   
     } 



     // Button Add Link 
     private void btn_AddLink(Object sender, EventArgs e) 
     { 
      Controls.Clear(); 
      btnAddNewLink = new Button(); 
      txtLink = new TextBox(); 
      txtLinkUrl = new TextBox(); 
      Controls.Add(txtLink); 
      Controls.Add(txtLinkUrl);     
      btnAddNewLink.Text = "ADD NEW Link"; 
      btnAddNewLink.Click += new EventHandler(btnAddNewLink_Click); 
      Controls.Add(btnAddNewLink); 

     } 
     private void btnAddNewLink_Click(Object sender, EventArgs e) 
     { 
      int i; 
      try 
      { 
       ConnectionMethod(); 
       cmd.CommandText = "sp_InsertLinks"; 
       cmd.CommandType = CommandType.StoredProcedure; 
       SqlParameter paramLinkName = new SqlParameter("@LinkName", SqlDbType.VarChar, 50); 
       SqlParameter paramLinkUrl = new SqlParameter("@LinkUrl", SqlDbType.VarChar, 50); 
       paramLinkName.Direction = ParameterDirection.Input; 
       paramLinkUrl.Direction = ParameterDirection.Input; 
       paramLinkName.Value = txtLink.Text.ToString(); 
       paramLinkUrl.Value = txtLinkUrl.Text.ToString(); 
       cmd.Parameters.Add(paramLinkUrl); 
       cmd.Parameters.Add(paramLinkName); 
       i = cmd.ExecuteNonQuery(); 
       con.Close(); 
       ConnectionMethod(); 
       RefreshData(); 
      } 
      catch (Exception exp) 
      { 
       Label l = new Label(); 
       l.Text = exp.StackTrace; 
       Controls.Add(l); 
      } 
      finally 
      { 
       con.Close(); 
      }   

     } 
     private void RefreshData() 
     { 
      cmd.CommandText = "sp_GetLinks"; 
      cmd.CommandType = CommandType.StoredProcedure; 
      dr = cmd.ExecuteReader(); 

      outputDisplay = new System.Text.StringBuilder(); 
      outputDisplay.AppendLine("<br/>"); 

      // Fetching the Data from the Datareader object 

      while (dr.Read()) 
      { 
       outputDisplay.AppendLine("<a href=" + dr[0].ToString() + ">" + dr[1] + "</a>" + "<br/><br/>"); 
      } 
      con.Close(); 
      outputDisplay.AppendLine("<br/> <br/>"); 
      lblDisplay.Text = outputDisplay.ToString(); 
      Controls.Add(lblDisplay); 

     } 


     // Method to get the Connection 

     public void ConnectionMethod() 
     { 
      con = new SqlConnection(); 
      cmd = new SqlCommand(); 
      Con_string = "Data Source=servername;Initial Catalog=HariVMTest;Integrated Security=True"; 
      con.ConnectionString = Con_string; 
      con.Open(); 
      cmd.Connection = con; 
     } 
    } 
} 

謝謝

哈日

+0

偏離主題,但在「sp_」前加存儲過程被認爲是一種不好的做法:http://stackoverflow.com/questions/871612/whats-the-best-practice-of-naming-stored-procedure-for- T-SQL – 2011-01-31 16:38:47

回答

0

我幾乎總是建議在CreateChildControls()

創建所有控件那麼你應該使用Visible屬性顯示並根據需要隱藏控件。然後

的代碼會是這個樣子:

public class ContextMenuOptionsUsingJQuery : System.Web.UI.WebControls.WebParts.WebPart { 

    Button btnAddLink; 
    Button btnAddNewLink; 

    protected override void CreateChildControls() { 
     btnAddLink = new Button(); 
     btnAddLink.Text = "Add Link"; 
     btnAddLink.Click += new EventHandler(btn_AddLink); 
     Controls.Add(btnAddLink);  

     btnAddNewLink.Text = "ADD NEW Link"; 
     btnAddNewLink.Click += new EventHandler(btnAddNewLink_Click); 
     btnAddNewLink.Visible = false; 
     Controls.Add(btnAddNewLink); 
    } 

    private void btn_AddLink(Object sender, EventArgs e) { 
     btnAddLink.Visible = false; 
    } 

    private void btnAddNewLink_Click(Object sender, EventArgs e) { 

    } 
} 

如果你做這種方式,您的活動會更多的,往往不是正確火。

0

我想你只需要添加: //通過按鈕添加新鏈接 btnAddLink = new Button(); btnAddLink.Text =「添加鏈接」; btnAddLink.Click + = new EventHandler(btn_AddLink);

createchildcontrol()中的connectionmethod之前

希望這能起作用。