2015-04-27 57 views
0

这是我对我的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?

+2

什么是StatusVal ..它的类型是什么..?你也许想创建一个'List '你可以发布所有相关的代码吗? – MethodMan

+0

你需要将这些额外的值添加到绑定到中继器的对象,并使用数据绑定事件来显示/隐藏所需的列。 –

+0

@MethodMan StatusVal是一个字符串。循环似乎工作得很好。我想事实上我的aspx代码有​​<%= StatusVal%>,它只取最后一个初始值。 – thestralFeather7

回答

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

我还要指出的财产,“OnItemDataBound “,应该添加到你的中继器,并参考上面的方法:

OnItemDataBound="shoppingcartlines_ItemDataBound" 

最后,别忘了给一个DD添加

<%= Bind("StatusVal") %> 

<%= Bind("InvVal") %> 

你的td元素。

+0

所以我只为2列制作不同的表格?然后将其绑定到新的数据源? – thestralFeather7

+0

您应该可以将它保留在同一个表格中。只需将<%= Bind(“StatusVal”)%>和<%= Bind(“InvVal”)%>添加到td元素即可。 –

+1

你能弄明白吗? –