所以我删除了数据并且只有DataBind()然后我的页面仍在吹动并刷新页面而不是编辑模式。
我想要做的是当用户点击“编辑”按钮,然后使其内联编辑转发器行。
END UPDATE
onItemCommand我添加了DataBind()
rpt.DataSource = mydatasource;
rpt.DataBind();
在我这样做之后,我的页面不处于编辑模式,它会被吹走,每一个都被刷新 我有page_load
if (!IsPostBack)
{
rpt.DataSource = mydatasource;
rpt.DataBind();
}
结束更新
我已经多次使用中继器而没有任何问题,但这里发生了一些事情。我有一个转发器,我正在订阅itemDatabound事件,但当我点击按钮(这是我的转发器itemtemplate中的链接按钮)时,它没有转到ItemDataBound
<asp:Repeater ID="rpt" runat="server" OnItemCommand="rpt_OnItemCommand" OnItemDataBound="rpt_OnItemDataBound">
<ItemTemplate>
<li>
<asp:Label ID="Label" runat="server" />
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit" CommandArgument='<%# Eval("MyID") %>'
Text='<%# Eval("Title") %>' />
</li>
</ItemTemplate>
</asp:Repeater>
protected void rpt_OnItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "delete")
{
//Data.Contacts.RemoveAt(e.Item.ItemIndex);
}
else if (e.CommandName == "edit")
{
EditIndex = e.Item.ItemIndex;
}
else if (e.CommandName == "save")
{
//
}
}
protected void rpt_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (e.Item.ItemIndex == EditIndex)
{
// never come to this line.... after the user click on LinkButton
}
}
}
答案 0 :(得分:1)
不知道这是否有帮助,但您必须调用DataBind()才能触发OnItemDataBound事件。另外我的猜测是你试图在OnItemCommand中设置EditIndex,然后使用OnDataBind事件中的值。事件按照OnItemDataBound和OnItemCommand的顺序触发,因此在那种情况下EditIndex无论如何都不正确。
将rpt.DataBind添加到OnItemCommand。当我从你的代码中尝试它时,这就行了。注意如果你没有使用它将绑定两次!IsPostBack用于原始数据绑定。
rpt.DataSource = strings;
if (!IsPostBack)
{
rpt.DataBind();
}
protected void rpt_OnItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "delete")
{
//Data.Contacts.RemoveAt(e.Item.ItemIndex);
}
else if (e.CommandName == "edit")
{
EditIndex = e.Item.ItemIndex;
}
else if (e.CommandName == "save")
{
//
}
rpt.DataBind();
}
答案 1 :(得分:0)
您必须更改rpt_OnItemCommand函数。
protected void rpt_OnItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "delete")
{
//Data.Contacts.RemoveAt(e.Item.ItemIndex);
}
else if (e.CommandName == "edit")
{
EditIndex = e.Item.ItemIndex;
}
else if (e.CommandName == "save")
{
//
}
else if (e.CommandName == "Complete")
{
// your function goes here
}
}
答案 2 :(得分:0)
我有点困惑,但从上面的例子来看,你看起来已经倒退了。单击按钮将从不触发ItemDataBound
事件。 ItemDataBound
事件仅在每个项目绑定到转发器后调用。
按钮单击应该触发ItemCommand
事件,如果没有发生,我会检查以确保您实际分配了ItemCommand
处理程序,并确保命令名称是有效的。
另外,当每个回发绑定转发器时,也会发生此行为。确保在!Page.IsPostBack
时绑定转发器。
答案 3 :(得分:0)
为什么您认为点击ItemDataBound
后LinkButton
被提出?只有在调用ItemDataBound
时才会触发Repeater.DataBind()
。
实际上,转发器的ItemCommand
事件被提升了。