1

テーブルを表示する html コードで構成されるカスタム コントロールを作成したいのですが、このテーブルのフッターに 3 つのボタンを追加する必要があります。私がしたことは、WebControl クラスから継承することです。

public class MyCustomControl : WebControl {  
    protected override void RenderContents(HtmlTextWriter output)
    {  
    // using output.Write I write the table in html code  
    // and I write the three buttons using <input> tag in html not <asp:button> tag
    }  
}

ここで必要なのは、作成した各ボタンに 1 つずつ 3 つのイベントを追加することです。これらのイベントはユーザー インターフェイスで使用され、適切なボタンがクリックされたときに発生します。

<asp:MyCustomControl runat="server" id="myCtrl" onButton1Click="Button1_Click" onButton2Click="Button2_Click" />  

これどうやってするの ?

ありがとう

* *UPDATE1:
カスタム コントロールのレンダリング コードは次のようになります。

protected override void RenderContents(HtmlTextWriter output)
    {
    output.Write("<table> ......");
    output.Write("<input id='button1' type='button'>");
    output.Write("<input id='button2' type='button'>");
    output.Write("<input id='button3' type='button'>");
    output.Write(".........</table>");
    }

では、「button1」がサーバー側でイベントを発生させるにはどうすればよいでしょうか?

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

public class MyCustomControl : WebControl
{

 public Button Button1 = new Button {Text = "Button1"};
 public Button Button2 = new Button {Text = "Button2"};

 public event EventHandler Button1_Click;
 public event EventHandler Button2_Click;

 protected override void OnPreRender(EventArgs e)
 {
   Button1.Click += Button1Click;
   Button2.Click += Button2Click;
   base.OnPreRender(e);
 }

 protected override void RenderContents(HtmlTextWriter output)
 {
  using (var plh = new PlaceHolder())
   {
   var htmlCode = new StringBuilder();
   htmlCode.Append("....html code for table...");

   var container = new HtmlGenericControl { InnerHtml = htmlCode.ToString() };

   plh.Controls.Add(container);
   plh.Controls.Add(Button1);
   plh.Controls.Add(Button2);
   plh.RenderControl(output);

   htmlCode.Append("..../html code for table...");
   }
 }

 private void Button1Click(object sender, EventArgs e)
 {
  if (Button1_Click != null)
      Button1_Click(this, e);
 }

 private void Button2Click(object sender, EventArgs e)
 {
  if (Button2_Click != null)
      Button2_Click(this, e);
 }

そして、page.aspx で:

<cc1:MyCustomControl ID="myCtrl" runat="server" onbutton1_click="MyCustomControl_Button1_Click" />

しかし、これでもbutton1のクリックメソッド「MyCustomControl_Button1_Click」は呼び出されません。

4

3 に答える 3

0

MyCustomControlクラス内で、 を受け取っ(object sender, EventArgs e)て返すイベントを定義しますvoid

click次に、内部ボタンのイベントのイベント ハンドラーを (まだ MyCustomControl 内に) 追加します。
これらのメソッド内で、 を実行しますCustomClickEvent.Invoke()

次に、カスタム コントロールを含むページで、myControl.CustomClickEvent += new CustomClickEvent(name_of_method_within_page);

于 2012-10-11T13:52:27.510 に答える
0

次のように新しいイベントを宣言します。

public event EventHandler OnButton1Click;
public event EventHandler OnButton2Click;
public event EventHandler OnButton3Click;

これは、各ボタンのクリック メソッドで次のように実行します。

public void Button1_Click(object sender, EventArgs e)
{
    if (OnButton1Click != null)
        OnButton1Click(this, null);
}
于 2012-10-11T13:49:46.653 に答える
0

カスタム コントロールから asp コントロールをレンダリングするには、Render 基本メソッドからそれを行います。

protected override void Render(HtmlTextWriter writer)

この方法でコントロールの前に準備する

protected override void CreateChildControls()
于 2012-10-11T20:51:51.843 に答える