2011-01-31 3 views
0

링크라는 테이블이 있습니다. sp_InsertLinks, sp_GetLinks라는 두 개의 저장 프로 시저가 있습니다.WebPart-Button Click

두 개의 매개 변수를 사용하고 SQL Table 호출 링크를 추가하는 간단한 webpart가 있습니다.

첫 번째 인터페이스에는 데이터베이스의 값 목록과 추가 할 단추 목록이 표시됩니다.

링크를 클릭하면 다음 인터페이스가 표시됩니다. 여기서 링크 이름에 txtbox를 추가하고 링크 URL에는 Txtbox를 추가 할 수 있습니다.

그리고 내가 제출할 때 페이지가 정상적인 셰어 포인트 라이프 사이클 이벤트 순서대로로드됩니다.

그리고 단추 클릭 방법이 실행되지 않으므로 새 링크를 페이지에 추가 할 수 없습니다.

누구든지이 부분을 살펴볼 수 있습니까?

코드입니다 :

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; 
     } 
    } 
} 

감사합니다

하리

나는 거의 항상 그런 다음 표시 할 Visible 속성을 사용한다 CreateChildControls()

에 모든 컨트롤을 만드는 것이 좋습니다

+0

주제를 벗어나지 만 "sp_"로 저장 프로 시저를 접두어로 사용하는 것은 나쁜 습관으로 간주됩니다. http://stackoverflow.com/questions/871612/whats-the-best-practice-of-naming-stored-procedure-for- 티 - SQL –

답변

0

필요에 따라 컨트롤을 숨 깁니다.

코드는 다음과 같이 보일 것입니다 :

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 + = 새 EventHandler (btn_AddLink);

는 createchildcontrol에서 connectionmethod 전에()

희망이 작동합니다.