无法更改Code Behind中链接按钮的属性

时间:2013-08-01 06:42:00

标签: c# asp.net linkbutton

我已经厌倦了一件非常简单的事情,我已经完成了数百万次,但这一次,我不能。

我的Gridview中有LinkBut​​tons,如

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="GVCon_TFEdit" runat="server" CssClass="eh_label_style" CommandArgument="Edit" CommandName="Edit" Text="Edit"></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

那些我有六次。 总是一个Edit和一个Delete-LinkBut​​ton。

然后我尝试在第5行的Codebehind中更改它们的可见性(如果我注释掉,然后在6等):

1    protected void Page_PreRenderComplete(object sender, EventArgs e)
2            {
3                if (Session["Permissions"].ToString() == "User")
4                {
5                    GVComp_TFDelete.Visible = false;
6                    GVComp_TFEdit.Visible = false;
7                    GVCon_TFDelete.Visible = false;
8                    GVCon_TFEdit.Visible = false;
9                    GVMatr_TFDelete.Visible = false;
10                   GVMatr_TFEdit.Visible = false;

但它总是带给我一个众所周知的例外:

  

由于对象的当前状态

,操作无效

嗯 - 我确定对象不再存在了吗?! (而且Session [“Permissions”]也肯定是空的,因为它已经在PreLoad中获得了他的状态...)

也许我必须告诉你更多,因为我确实遇到了那些LinkBut​​tons bevert的问题^^ 所以 - 在那些TemplateFields我有完全相同的LinkBut​​tons,然后我改变了那些LB的名称,从那时起我就不能在CodeBehind中使用它们。 这是因为他们不再在设计师档案中...... 所以我尝试了很多我在inet中找到evrywhere的提示,也来自这里的提示 - 但是它们没有用(比如重建设计器文件,将LinkBut​​tons新写入aspx文件也确保文件位于正确的文件夹等) ...)没有任何效果。 所以我把它们手工添加到designer.cs中。现在我可以在CodeBehind中“使用”它们,但是当我开始调试时 - 它会遇到这个错误。

如果你能帮助我真的很好,这太烦人了......

2 个答案:

答案 0 :(得分:2)

您也可以通过这种方式找到RowCommand事件

LinkButton name = (LinkButton)gridview.Rows[index].FindControl("lnkbtnActionNames");

name.visible=false;

答案 1 :(得分:1)

由于您使用的是Gridview,因此您必须将事件RowDataBound用于gridview。

在这种情况下,您必须检查e.Row.RowType == DataControlRowType.DataRow

之后,您可以使用

LinkButton lb = ((LinkButton)e.Row.FindControl("GVCon_TFEdit"));

获取当前行的linkbutton,然后使用lb.Visible = false;或您需要的任何代码。