我的网页表单上有一个动态数量的按钮。该页面将用作检查表,每个标签有两个按钮(一个用于良好,一个用于不好)。我希望在每个按钮添加到表单时附加一个事件监听器。我已经尝试了几种不同的方式并进行了搜索,但一直无法找到有效的方法。欢迎所有建议!
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>
需要在每个页面加载上创建动态创建的控件,其中包括PostBack
。
此处有更多信息:http://www.aspsnippets.com/Articles/Dynamic-Controls-Made-Easy-in-ASP.Net.aspx
答案 1 :(得分:1)
您正在尝试使用服务器端代码查找html按钮。这是不可能的。 您应该使用服务器端代码创建所有控件。 我写了一个服务器端的c#iplementation我不擅长vb。
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);