[英]Asp.net Linkbutton loop
我对动态链接按钮有疑问,需要帮助。 我正在基于数据表中的记录创建一个动态的asp.net表。 我也在使用动态链接按钮。
protected System.Web.UI.WebControls.LinkButton lb;
protected override void OnInit(EventArgs e)
{
// Build controls before page load
lb = new LinkButton();
lb.Text = "Update Image";
// LinkButton obj for updating record
lb.ID = "UpdateImg";
lb.Click += new EventHandler(UpdateImg);
this.Controls.Add(lb);
base.OnInit(e);
}
我创建了一个新的linkbutton实例OnInit,以便可以在页面加载之前将其添加到页面中。
foreach (DataRow r in tb.Rows) // Create new row foreach row in table
{
TableRow tr = new TableRow();
// Build cells
TableCell c1 = new TableCell();
TableCell c2 = new TableCell();
TableCell c3 = new TableCell();
TableCell c4 = new TableCell();
TableCell c5 = new TableCell();
TableCell c6 = new TableCell();
c1.Controls.Add(new LiteralControl(r["Image_id"].ToString()));
tr.Cells.Add(c1);
c2.Controls.Add(new LiteralControl(r["Image_name"].ToString()));
tr.Cells.Add(c2);
c3.Controls.Add(new LiteralControl(r["Alt_text"].ToString()));
tr.Cells.Add(c3);
c4.Controls.Add(new LiteralControl("<input id=\"" + r["Image_id"].ToString() + "\" type=\"checkbox\"" + "\"></input>"));
tr.Cells.Add(c4);
LinkButton lbcopy = new LinkButton();
lbcopy = lb;
lbcopy.ID = "UpdateImg" + i;
i++;
c5.Controls.Add(lbcopy);
tr.Cells.Add(c5);
c6.Controls.Add(new LiteralControl("<a href=\"javascript:void(0);\" onclick=\"DeleteImage('" + r["Image_id"].ToString() + "','" + r["Image_name"].ToString() + "');\"><img src=\"../images/clipboard/del.png\" id=\"" + r["Image_id"].ToString() + "\" width=\"20\" height=\"20\" BORDER=0></a>"));
tr.Cells.Add(c6);
tblImageLibrary.Rows.Add(tr); // Assign tr to table
然后,我使用一个foreach循环来遍历数据表中的每一行,这样就可以构建每个表行并将单元格添加到每一行。 我遇到的问题是linkbutton出现在最后一行。 可能是因为只有一个linkbutton对象,并且通过每次循环迭代将其移至下一行?
我是asp.net的新手,所以轻松一点。
感谢您尝试做的事情,但我可以建议另一种方法。 尝试使用ListView(.Net 3.5+),并将linkButton放在每一行中。 然后可以根据需要通过钩入ItemDataBound事件来隐藏linkButton。 此时,按钮也可以嵌入命令参数。
protected void MyListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
LinkButton linkButton = (LinkButton)e.Item.FindControl("linkButtonId");
System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
//.. can hide and show depending on data
linkButton.Visible = rowView["SomeData"].ToString() == "SomeValue";
//.. or set command arg
linkButton.CommandArgument = rowView["SomeMoreData"].ToString();
}
然后,链接按钮将触发ItemCommand事件。 可以从事件中检索数据行和任何命令参数。
protected void MyListView_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
if(e.CommandArgument == "SomeValue")
{
//.. do something
}
}
可以在与早期版本的.Net(分别为1.0和2.0)一起工作的Repeater和GridView控件上使用类似的方法。 您甚至可能会发现GridView更加有用,因为编辑按钮的开箱即用。
您动态构造表的方式可能会遇到事件和ViewState问题。 利用.Net网格控件会容易得多。
我认为这是不可能的,因为如果要动态添加Control,则必须为每个记录创建循环,然后将其添加到表中。
您是否要渲染每行带有linkbuttons
的表? 看一下asp:listview
或asp:gridview
。
如果你能得到一个DataTable
或DataSet
从您的数据库,那么你只需要将其绑定到你的列表视图或GridView控件。 例如
myListView.datasource = myDataSet myListView.databind()
您还需要定义布局并在aspx页面上指定列名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.