2011-01-31 13 views
0

私はリンクと呼ばれるテーブルを持っています。 sp_InsertLinks、sp_GetLinksという2つのストアドプロシージャが格納されています。WebPart-Button Click

私は2つのパラメータをとり、SQLテーブル呼び出しリンクを追加する簡単なwebpartを持っています。

In最初のインターフェイスでは、データベースからの値の一覧と[追加するボタン]の一覧が表示されます。

リンクをクリックすると、次のインターフェイスが表示されます。ここで、リンク名には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; 
     } 
    } 
} 

ありがとう

ハリ

+0

トピックはありませんが、ストアドプロシージャの先頭に「sp_」を付けるのは悪い方法です。http://stackoverflow.com/questions/871612/whats-the-best-practice-of-naming-stored-procedure-for- t-sql –

答えて

0

私はほぼ常に、あなたが表示するようにVisibleプロパティを使用する必要がありますCreateChildControls()

にすべてのコントロールを作成するようにお勧めします必要に応じてコントロールを非表示にします。

のコードは次のようになります:

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前

()

はこの作品を願っています。