将控件添加到表格内的innerhtml div

Posted

技术标签:

【中文标题】将控件添加到表格内的innerhtml div【英文标题】:add controls to innerhtml div inside table 【发布时间】:2014-02-18 20:24:30 【问题描述】:

在一个 div 中,我试图从代码隐藏中添加一个表格。 我需要在这个表中添加 2 个控件,所以为了做到这一点,我将代码放在 Page_Init() 中,但它不会添加控件,所以我应该怎么做才能解决这个问题,或者我应该采取完全不同的方式。

我的代码:

if ((List<ShoppingCart>)Session["shoppin"] != null)
        
            string cartcontent = "";
            TextBox txtbox = new TextBox();
            txtbox.TextChanged +=new EventHandler(txtbox_TextChanged);
            txtbox.CssClass = "carttextbox";
            Button btn = new Button();
            btn.Click +=new EventHandler(btn_Click);
            btn.Text = "Remove";
            btn.CssClass = "cartbtn";
            maincontent.Controls.Add(txtbox);
            maincontent.Controls.Add(btn);

            foreach (ShoppingCart r in (List<ShoppingCart>)Session["shoppin"])
            
                cartcontent = cartcontent + "<tr class='row'>" +
                    "<td class='cart_prods'>" +
                    "<table>" +
                    "<tr>" +
                    "<td colspan='2'><b>" + r.ProductName + "</b></td>" +
                    "</tr>" +
                    "<tr>" +
                    "<td align='center' style='width:100%'> <img src='" + r.ProductImage + "' alt='' style='max-height:150px' /></td>" +
                    "<td><div class='.cart_products_options'><i>" + r.ProductOptions + "</i></div></td>" +
                    "</tr>" +
                    "</table>" +
                    "</td>" +
                    "<td class='cart_update' style='border-width: 0px 1px 1px 0px;'>" + txtbox + btn + "</td>" + 
                    "<td class='cart_price' style='border-width: 0px 0px 1px;'><span class='ProductSpecialPrice'> $"+ r.ProductPrice + "</span></td>"
                    +"</tr>";
                double pricetotal = 0;
                pricetotal = pricetotal + r.ProductPrice;
            

            maincontent.Innerhtml = "<table width='90%' style='margin:0 auto; margin-top:50px;' class='cart'>" +
                "<tr align='center'>" +
                    "<th class='th1'><b>Product(s)</b></th>" +
                    "<th><b>Qty</b></th>" +
                    "<th class='th3'><b>Total</b></th>" +
                "</tr>" + cartcontent +
                "<tr class='cart_total'>" +
                    "<td></td>" +
                    "<td style='border-width: 1px 1px 0px 0px; text-align:right;'>Sub-Total</td>" +
                    "<td></td>" +
                "</tr>" +
            "</table>";
        

【问题讨论】:

【参考方案1】:

下面的方法应该更简单,也避免了动态添加控件:

在页面上创建一个中继器。 设置 HeaderTemplate 和 FooterTemplate,使其包含开始表格标记(或结束标记,如果是页脚)以及表格页眉和页脚的标记。 设置 ItemTemplate 使其与您在 cartcontent 字符串中构建的标记相匹配。将包含购物车数据的控件添加到 ItemTemplate 中,并使用数据绑定设置文本。 如果有条目,则将Repeater绑定到List&lt;ShoppingCart&gt;,否则将Visible设置为false。

有关中继器控件的详细信息,请参阅link。它还包含各种教程的链接。

更新: 为了在不使用 DataBinding 的情况下动态设置行中的值,例如要在页脚中设置总计,请执行以下操作:

为页脚添加标签,为其分配 ID 并设置runat="server"。 为转发器的ItemDataBound 事件添加一个处理程序。 在处理程序中,检查绑定的项目类型。如果是页脚,则找到 Label 控件并为其赋值。
private void Rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)

    if (e.Item.ItemType == ListItemType.Footer)
    
        var lbl = (Label)e.Item.FindControl("LabelId");
        if (lbl != null)
            lbl.Text = "123.45";
    

【讨论】:

那行得通。唯一不就是我需要从后面的代码中添加一个值到页脚,我无法得到我放在那里的 div @user3025852:很高兴听到它有效。我已经在页脚中更新了我的样本总数。

以上是关于将控件添加到表格内的innerhtml div的主要内容,如果未能解决你的问题,请参考以下文章

从 InnerHTML 中的代码隐藏向页面添加 ASP 控件

ASP 生命周期、InnerHtml 和动态控件

使用设计器 ASP.NET C# 将事件附加到占位符内的控件

将表格视图和导航控件添加到现有的基于视图的应用程序

InnerHTML 更改旧变量

将 ChChart 控件链接到电子表格控件数据