我试图更改我的转发器中的值:(通过itemdatabound事件)
如果年份为空 - 设置值blabla
我的转发器:
<ItemTemplate>
<tr >
<td >
<%#Eval("year") %>
</td>
我的c#代码:
void RPT_Bordereaux_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (string.IsNullOrEmpty(((DataRowView)e.Item.DataItem)["year"].ToString()))
{
(((DataRowView)e.Item.DataItem)["year"]) = "blabla"; // ???????
}
}
它确实发生了变化但未在转发器中显示(显示旧值)。
一种解决方案是在server control
中添加literal
或itemTemplate
(runat服务器) - 并在服务器中添加“findControl
”并更改其值。 / p>
其他解决方案是通过jQuery - 搜索空的最后一个TD。
但是 - 我的问题:
还有其他服务器端解决方案()?
答案 0 :(得分:6)
.aspx中的转发器:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<table>
<tr>
<td> <%# GetText(Container.DataItem) %></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
.cs :
protected static string GetText(object dataItem)
{
string year = Convert.ToString(DataBinder.Eval(dataItem, "year"));
if (!string.IsNullOrEmpty(year))
{
return year;
}
else
{
return "blahblah";
}
}
IN GetText
方法您可以通过字符串检查是否为空而不是返回字符串。
答案 1 :(得分:1)
HTML文件
<asp:Repeater ID="RPT_Bordereaux" runat="server">
<ItemTemplate>
<table>
<tr>
<td> <%# GetValue(Container.DataItem) %></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
.CS CODE
protected void RPT_Bordereaux_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
}
}
protected static string GetValue(object dataItem)
{
string year = Convert.ToString(DataBinder.Eval(dataItem, "year"));
if (!string.IsNullOrEmpty(year))
{
return Convert.ToString(year);
}
else
{
return "blahbla";
}
}
这应该有效
答案 2 :(得分:0)
您可以尝试使用在绑定控件之前发生的itemcreated事件,而不是在绑定控件之后。第一个链接中的示例:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcreated.aspx
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater_events.aspx
ItemDataBound在Repeater控件中的项目受数据限制但在页面上呈现之前发生。