1

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

这是后面的代码。[...] 是我在数据库中进行更新的地方

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;
           }
       }
    }
4

1 回答 1

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;
    }
}
于 2013-02-18T15:18:52.287 回答