这是我在 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?
答案 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元素。