2

所以我已经删除了数据源,只有 DataBind() 然后我的页面仍在刷新页面,而不是处于编辑模式。

我想要做的是当用户单击编辑按钮然后使其内联编辑中继器行时。

结束更新

onItemCommand 我添加了 DataBind()

rpt.DataSource = mydatasource; 
rpt.DataBind();

在我这样做之后,我的页面没有处于编辑模式并且它被吹走并且我在 page_load 上的所有内容都被刷新了

if (!IsPostBack) 
{
   rpt.DataSource = mydatasource; 
    rpt.DataBind();

}

结束更新

我已经多次使用中继器没有问题,但这里发生了一些事情。我有一个转发器,我正在订阅 itemDatabound 事件,但是当我单击按钮(这是我的转发器项目模板中的一个链接按钮)时,它不会转到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

        }

      }
} 
4

4 回答 4

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();

   }
于 2012-04-12T21:58:34.197 回答
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
    }
}
于 2012-04-12T21:48:38.477 回答
0

我有点困惑,但从上面的例子来看,你似乎把它弄反了。按钮单击永远不会触发ItemDataBound事件。ItemDataBound仅在每个项目绑定到中继器后才调用该事件。

但是,单击按钮应该会触发该ItemCommand事件,如果没有发生这种情况,我会检查以确保您实际分配了ItemCommand处理程序,并确保命令名称有效。

附带说明一下,当转发器在每次回发时都绑定时,也会发生这种行为。确保在!Page.IsPostBack.

于 2012-04-12T21:51:05.907 回答
0

为什么你认为ItemDataBound当你点击你的时会引发LinkButtonItemDataBound仅在Repeater.DataBind()被调用时触发。实际上,转发器的ItemCommand事件被引发了。

于 2012-04-12T21:52:23.750 回答