应对中继的ItemTemplate里面按钮事件(Respond to Button Events i

2019-09-16 12:54发布

所以我已经删除了datasouce,只是有的DataBind(),然后我的网页仍吹刷新页面,而不是在编辑模式。

我所试图做的是当编辑按钮,用户点击即可使其内嵌编辑中继一行。

结束时更新

onItemCommand我已经加入的DataBind()

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

之后,我做我的页面是不是在编辑模式下,它吹走和everyting刷新我对的Page_Load

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

}

最终更新

我用中继很多次都没有问题,但事情是怎么回事。 我有一个直放站和我订阅ItemDataBound事件,但是当我点击按钮(这是我的ItemTemplate直放站里面一个LinkBut​​ton)它不会去到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

        }

      }
} 

Answer 1:

不知道如果这能帮助,但你必须先调用DataBind()用于为OnItemDataBound事件触发。 另外我的猜测是,你正在尝试设置EditIndex在OnItemCommand,然后在OnDataBind事件中使用的值。 然后,事件触发的顺序OnItemDataBound OnItemCommand所以在那种情况下,EditIndex是不正确反正。

添加rpt.DataBind到OnItemCommand。 这workded当我试图从你的代码,请注意,您如果不使用具有约束力的两倍!的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();

   }


Answer 2:

你必须改变你的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
    }
}


Answer 3:

为什么你认为ItemDataBound当你点击你的上升LinkButtonItemDataBound时仅触发Repeater.DataBind()被调用。 实际上,中继器的ItemCommand事件将改为引发。



Answer 4:

我有点困惑,但是从上面的例子中,它看起来像你已经得到它倒退。 点击该按钮将永远不会触发了ItemDataBound事件。 该ItemDataBound每个项目都绑定到中继器后事件才调用。

点击该按钮启动时机的ItemCommand然而事件,如果没有发生我会检查,以确保您实际上已经分配ItemCommand处理程序,并确保该命令名是有效的。

在一个侧面说明,当中继器在每个回发势必也发生此行为。 请确保您要绑定的中继器时!Page.IsPostBack



文章来源: Respond to Button Events inside Repeater ItemTemplate