FindControl在detailsView中的templatefield(linkbutton)失败

时间:2012-11-12 05:40:51

标签: asp.net

当DetailsView不处于ReadOnly模式时,我想将templatefield(linkbutton)设置为不可见。我创建了一个链接按钮来替换自动“删除”按钮,并希望在编辑和插入时隐藏它。

<asp:DetailsView ID="resultDetailsView" runat="server" AutoGenerateRows="False" DataKeyNames="smo_code,id"
    DataSourceID="detailviewDataSource" Height="50px" Width="125px" OnItemInserting="resultDetailsView_ItemInserting"
    OnItemUpdating="resultDetailsView_ItemUpdating" OnItemUpdated="resultDetailsView_ItemUpdated"
    OnItemDeleted="resultDetailsView_ItemDeleted" OnItemInserted="resultDetailsView_ItemInserted"
    OnItemDeleting="resultDetailsView_ItemDeleting" OnModeChanging="resultDetailsView_ModeChanging"
    OnDataBound="resultDetailsView_DataBound" OnItemCommand="resultDetailsView_ItemCommand">
    <Fields>
        <asp:BoundField DataField="event" HeaderText="event" SortExpression="event" />
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="deleteLink" runat="server" CommandName="Delete" Text="Delete"
                    OnClientClick='return confirm("Are you sure you want to delete this item?");' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowDeleteButton="False" ShowEditButton="True" ShowInsertButton="True" />
    </Fields>
</asp:DetailsView>

在CODE BEHIND中,FINDCONTROL返回null:

protected void resultDetailsView_DataBound(object sender, EventArgs e)
{
    LinkButton deleteLink = (LinkButton)resultDetailsView.FindControl("deleteLink");
    if (resultDetailsView.CurrentMode == DetailsViewMode.ReadOnly)
    {
        deleteLink.Visible = true;
    }
    else
    {
        deleteLink.Visible = false;
    }
 }

1 个答案:

答案 0 :(得分:0)

您可以在.DataBind()方法之后执行此操作。这是一个很好的例子 How to dynamically hide fields in a DetailsView (fields count is always 0)
或者甚至这也是一个很好的例子 Listview/DetailsView: Hide a null field