在后面的代码中使用循环中的变量来填充 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 元素。
这是我 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 元素。