【问题标题】:Asp.net Linkbutton loopAsp.net Linkbutton 循环
【发布时间】:2011-12-13 11:05:24
【问题描述】:

我遇到了需要帮助的动态链接按钮问题。我正在根据数据表中的记录创建一个动态 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);
    }

我创建了一个新的链接按钮实例 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 循环遍历数据表中的每一行,这样我就可以构建每个表格行并将单元格添加到每一行。我遇到的问题是链接按钮出现在最后一行。可能是因为只有一个链接按钮对象,并且通过每次循环迭代它被移动到下一行?

我是 asp.net 的新手,所以请放轻松。

【问题讨论】:

    标签: c# asp.net object loops linkbutton


    【解决方案1】:

    我很欣赏您正在尝试做的事情,但我可以建议另一种方式吗?尝试使用 ListView (.Net 3.5+) 并将 linkBut​​ton 放在每一行中。然后可以根据需要通过挂钩ItemDataBound 事件来隐藏链接按钮。此时按钮还可以嵌入命令参数。

     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 网格控件会容易得多。

    【讨论】:

      【解决方案2】:

      我认为这是不可能的,因为如果您想动态添加 Control,那么您必须为每条记录创建循环,然后将其添加到表中。

      【讨论】:

      • 我可以使用其他替代方案吗?链接按钮用于编辑数据表中的记录,这就是为什么我希望每一行都有一个链接按钮。因此用户可以编辑该特定行。
      • 没有任何方法可以直接使用。所以你必须为 if 使用循环。
      【解决方案3】:

      您是否尝试在每一行上呈现带有linkbuttons 的表格? 看看asp:listviewasp:gridview

      如果您可以从数据库中获取DataTableDataSet,那么您只需将其绑定到您的列表视图或网格视图。例如

      myListView.datasource = myDataSet myListView.databind()

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多