2017-01-04 8 views
2

私はページ上に動的な量のボタンを備えたWebフォームを持っています。このページは、ラベルごとに2つのボタンが付いたチェックシートとして使用されます(1つは良い、もう1つはうまくいきません)。私は彼らがフォームに追加されると、各ボタンにイベントリスナーを添付したいと思っています。私はいくつかの方法で試してみたが、何かを見つけることができなかった。すべての提案は歓迎!ASP.NETでダイナミックに作成されたHTMLボタンにイベントリスナーを割り当てる

For i = 0 To ds.Tables(0).Rows.Count - 1 
    Response.Write("<tr style='height:60px'>") 
    Response.Write("<td style='text-align:left; width:60%;'>") 
    Response.Write("<label ID='lbl" & i & "' style='font-size:40px;'>" & ds.Tables("Issues").Rows(i).Item("Issue") & "</label>") 
    Response.Write("</td>") 
    Response.Write("<td style='text-align:left; width:20%'>") 
    Response.Write("<button ID='btnOK" & i & "' style='font-size:25px; width:100%; height:100%;' type='button'>OK</button>") 
    Response.Write("</td>") 
    Response.Write("<td style='text-align:left; width:20%'>") 
    Response.Write("<button ID='btnNG" & i & "' style='font-size:25px; width:100%; height:100%;' type='button'>N/G</button>") 
    Response.Write("</td>") 
    Response.Write("</tr>") 

    Dim btnOK As Button = FindControl("btnOK" & i) 
    Dim btnNG As Button = FindControl("btnNG" & i) 

    'AddHandler btnOK.Click, AddressOf Me.btnOK_Click 
Next 

現在、このコードでは、FindControl関数は何も返しません。

+0

リピーターを使用しているように見えます。 –

答えて

2

ダイナミックボタンは作成していません。クライアントに書き込む文字列だけです。したがって、あなたのFindControlは、イベントリスナーを割り当てるのと同じように動作しません。

あなたは、このように動的にボタンを作成:

Button button = new Button(); 
button.ID = "Button1"; 
button.Text = "ClickMe"; 
//attach event 
button.Click += new EventHandler(Button1_Click); 

PlaceHolder1.Controls.Add(button); 

VB

Dim button As Button = New Button 
button.ID = "Button1" 
button.Text = "ClickMe" 
//attach event 
AddHandler button.Click, AddressOf Me.Button1_Click 

PlaceHolder1.Controls.Add(button) 

ASPXページの例

<table> 
    <tr style="height: 60px"> 
     <td> 
      <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
     </td> 
    </tr> 
</table> 

動的に作成されたコントロールは、すべてのページのロード上で作成する必要があり、それは、 a PostBack。ここ

さらに詳しい情報:http://www.aspsnippets.com/Articles/Dynamic-Controls-Made-Easy-in-ASP.Net.aspx

1

あなたは、サーバー側のコードでHTMLボタンを見つけようとしています。不可能だよ。 すべてのコントロールをサーバー側のコードで作成する必要があります。 私はVBでうまくいかないサーバー側のC#の熟練を書いた。

Table tbl = new Table(); 
    TableRow tr = null; 
    TableCell cell = null; 

    int rows = dt.Rows.Count; 
    int cols = dt.Columns.Count; 


    TableHeaderRow htr = new TableHeaderRow(); 
    TableHeaderCell hcell = null; 
    for (int i = 0; i < cols; i++) 
    { 
     hcell = new TableHeaderCell(); 
     hcell.Text = dt.Columns[i].ColumnName.ToString(); 
     htr.Cells.Add(hcell); 

    } 
    tbl.Rows.Add(htr); 


    for (int j = 0; j < rows; j++) 
    { 
     tr = new TableRow(); 
     for (int k = 0; k < cols; k++) 
     { 
      cell = new TableCell(); 
      cell.Text = dt.Rows[j][k].ToString(); 
      Button btn = new Button(); 
      btn.ID = "btnOK" + j; 
      cell.Controls.Add(btn); 
      btn.onclick = eventHandler //Handler comes here 
      tr.Cells.Add(cell); 

     } 
     tbl.Rows.Add(tr); 
    } 

    yourHtmlDiv.controls.add(table); 
関連する問題