绑定后可在转发器中显示特定标签

时间:2013-02-18 15:10:34

标签: asp.net repeater

我正在尝试在绑定后在我的转发器中显示特定标签。 我不希望转发器中每个项目的所有标签都可见。只是我点击按钮的那个。 当我点击按钮更新时,我正在更新我的数据库中的锦标赛项目的信息,然后我想显示一个标签,说明更改是成功的,但仅限于我更新的项目。

这是背后的代码。 [...]是我在DB中进行更新的地方

protected void repeatTourney_ItemCommand(object source, RepeaterCommandEventArgs e)  
           {  
               if (e.CommandName == "btnUpdate_Click")  
               {  
                   [...]
                   Label lblSuccess= (Label)e.Item.FindControl("lblUpdateSuccess");
                    bindRepeater(ddlEvents.Text);
                    lblSuccess.Visible = true;
               }
           }

这是aspx。 [...]是文本框和其他包含我的数据库项目信息的东西。

<asp:Repeater ID="repeatTourney" runat="server" OnItemDataBound="repeatTourney_ItemDataBound"
                    OnItemCommand="repeatTourney_ItemCommand">
    <ItemTemplate>
        <div class="form">
           [...]
            <asp:Label ID="lblUpdateSuccess" runat="server" Text="Update success" Visible="false" />
            <asp:Button ID="btnUpdate" runat="server" Text="Update" CssClass="button" CommandName="btnUpdate_Click" />
            [...]
        </div>
     </ItemTemplate>
 </asp:Repeater>

最后看起来应该是这样的

Item
 Info
 BtnUpdate
 lblSuccess.Visible = false

Item
 Info
 BtnUpdate <== Clicked
 lblSuccess.Visible = true

感谢您提供的任何帮助。

编辑:这是我的bindRepeater代码

 private void bindRepeater(string name)
        {
            List<Tourney> list = TourneyDAL.GetByNameEvent(name);
            [...]
            repeatTournois.DataSource = list;
            repeatTournois.DataBind();
            [...]
        }

编辑2: 感谢您提供ID的概念,以告知在绑定后哪一个需要可见。

工作得很好。 :)

这是我的新代码

private void bindRepeater(string name, int index)
    {
        List<Tourney> list = TourneyDAL.GetByNameEvent(name);
        [...]
        repeatTourney.DataSource = list;
        repeatTourney.DataBind();
        [...]
        if (index != 0)
        {
            Label lblReussie = (Label)repeatTourney.Items[index].FindControl("lblUpdateSuccess");
            lblSuccess.Visible = true;
        }

protected void repeatTourney_ItemCommand(object source, RepeaterCommandEventArgs e)  
       {  
           if (e.CommandName == "btnUpdate_Click")  
           {  
               [...]
               Label lblSuccess= (Label)e.Item.FindControl("lblUpdateSuccess");
                bindRepeater(ddlEvenements.Text, e.Item.ItemIndex);
                lblSuccess.Visible = true;
           }
       }
    }

1 个答案:

答案 0 :(得分:2)

你还没有说出了什么问题,你有例外吗?

您可以使用ItemDataBound来设置可见性。但是因此您必须存储最后更新的索引/ ID,例如在字段中:

protected void repeatTourney_ItemCommand(object source, RepeaterCommandEventArgs e)  
{  
    if (e.CommandName == "btnUpdate_Click")  
    {  
        updatedID = int.Parse(e.CommandArgument.ToString());
        bindRepeater(ddlEvents.Text);
    }
}


private int? updatedID = null;

protected void repeatTourney_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var tourney = (Tourney) e.Item.DataItem;
        Label lblUpdateSuccess = (Label)e.Item.FindControl("lblUpdateSuccess");
        lblUpdateSuccess.Visible = updatedID.HasValue && tourney.Id == updatedID.Value;
    }
}