繁体   English   中英

Asp.net Linkbutton循环

[英]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+),并将linkBut​​ton放在每一行中。 然后可以根据需要通过钩入ItemDataBound事件来隐藏linkBut​​ton。 此时,按钮也可以嵌入命令参数。

 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:listviewasp:gridview

如果你能得到一个DataTableDataSet从您的数据库,那么你只需要将其绑定到你的列表视图或GridView控件。 例如

myListView.datasource = myDataSet myListView.databind()

您还需要定义布局并在aspx页面上指定列名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM