更改转发器行值
本文关键字:转发器 | 更新日期: 2023-09-27 18:33:23
im 尝试更改我的中继器中的值:(通过 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"; // ???????
}
}
它确实发生了变化,但不显示在转发器中(显示旧值)。
一种解决方案是在itemTemplate
中添加server control
或literal
(runat server),并在服务器中添加"findControl
"并更改其值。
另一种解决方案是通过jQuery - 搜索空的最后一个TD。
但是 - 我的问题:
还有其他服务器端解决方案( )吗?
你可以尝试这样的事情:
.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";
}
}
在GetText
方法中,您可以通过字符串检查空或不返回字符串。
您可以尝试使用 itemcreate 事件,该事件发生在控件绑定之前,而不是绑定控件之后。第一个链接中的示例:
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 控件中的项进行数据绑定之后但在页面上呈现之前发生。
HTML 文件
<asp:Repeater ID="RPT_Bordereaux" runat="server">
<ItemTemplate>
<table>
<tr>
<td> <%# GetValue(Container.DataItem) %></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
.CS代码
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";
}
}
这应该有效