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

时间:2015-04-27 16:17:20

标签: c# asp.net datatable repeater

这是我在 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 个答案:

答案 0 :(得分:1)

问题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();

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

问题2:

根据您想要使用的任何条件来确定可见性,您可以做的一件事是:

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");
    }
}

我还应该声明属性&#34; OnItemDataBound&#34;应该添加到你的转发器中,并参考上面的方法:

OnItemDataBound="shoppingcartlines_ItemDataBound"

最后,不要忘记添加添加

<%= Bind("StatusVal") %>

<%= Bind("InvVal") %>

到你的td元素。