在后面的代码中使用循环中的变量来填充 table

Use variable from loop in code behind to populate table

这是我 aspx 页面

上的内容
<thead>
    <tr>
        <th>Line#</th>
        <th>Item</th>
        <th>Quantity</th>
        <th>Status</th>
   <%-- Make this column visible only for a certain condition--%>
        <th>Inventory</th>
   <%----%>
    </tr>
</thead>
    <tbody>
        <asp:repeater id="shoppingcartlines" runat="server">
                <itemtemplate>
                      <tr>
            <td><%# DataBinder.Eval(Container.DataItem,"LineNo") %></td>
            <td><%# DataBinder.Eval(Container.DataItem,"ItemName")%></td>
            <td><%# DataBinder.Eval(Container.DataItem,"Quantity")%></td>
            <td><%= StatusVal  %></td>
            <td><%= InvVal  %></td>
                     </tr>
               </itemtemplate>
        </asp:repeater> 
    </tbody>

这是我在 aspx.cs 页面(代码隐藏)中的内容

foreach ()
{
 StatusVal = loopdetail.Status; // string
 InvVal = loopdetail.InvVal; // string

}

问题 1: 特定循环的期望输出:

Status Inv

False   10
True    20

现在输出:

Status  Inv

 True    20
 True    20

StatusVal 变量显示从循环中获取的最后一个值。我希望他们如上所示逐行显示。

我在页面加载事件中这样做。

protected void Page_Load(object sender, EventArgs e)
  {
   foreach (ItemDetail loopdetail in Custom.ItemDetails)
            {
                // StatusVal and InvVal are public strings
                StatusVal = loopdetail.Status; // string
                InvVal = loopdetail.InvVal; // string

            }
  }

问题 2:

我只想显示符合特定条件的库存栏。我应该更改我的 aspx 文件还是 aspx.cs ?

问题 1: 这就是知道怎么做的:

Datatable dt = new Datatable();
dt.Columns.Add("StatusVal", typeof(bool));
dt.Columns.Add("InvVal", typeof(string));

foreach()
{
    dt.Rows.Add(new object[2]{loopdetail.Status, loopdetail.InvVal});
}

shoppingcartlines.DataSource = dt;
shoppingcartlines.DataBind();

也许这个解决方案对你来说是显而易见的,并且你能够做到这一点存在局限性,只是想我会提到它。

问题二:

考虑到您想使用什么条件来确定可见性,您可以做的一件事是:

protected void shoppingcartlines_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    RepeaterItem item = e.Item;
    HtmlTableCell td = (HtmlTableCell)item.FindControl("idOfTdYouWantToHide");

    if (iWantToDisplay)
    {
        td.Visible = true;
        // if that doesn't work, just do:
        //    td.Style.Add("display", "none");
    }
}

我还要说明一下,属性、"OnItemDataBound"应该加在你的转发器上,参考上面的方法:

OnItemDataBound="shoppingcartlines_ItemDataBound"

最后,别忘了加

<%= Bind("StatusVal") %>

<%= Bind("InvVal") %>

到你的 td 元素。