C# Can';t更改CodeBehind中链接按钮的属性

C# Can';t更改CodeBehind中链接按钮的属性,c#,asp.net,linkbutton,C#,Asp.net,Linkbutton,我在一件简单的事情上遇到了很多麻烦,我已经做了无数次了,但是这次,我做不到 我的Gridview中有链接按钮,如 <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="GVCon_TFEdit" runat="server" CssClass="eh_label_style" CommandArgument="Edit" CommandName="Edit" Text="Edit">

我在一件简单的事情上遇到了很多麻烦,我已经做了无数次了,但是这次,我做不到

我的Gridview中有链接按钮,如

<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>
但它总是给我带来一个众所周知的例外:

由于对象的当前状态,操作无效

好吧-我肯定那里的对象不再是空的了?! (会话[“权限”]也肯定不是空的,因为它正在PreLoad allready中获取他的状态…)

也许我必须告诉你更多,因为我在使用这些链接按钮时遇到了问题^^ 所以-在那些模板字段中,我有完全相同的链接按钮,然后我更改了那些LB的名称,从那时起,我不能在CodeBehind中使用它们。 因为他们不再是设计师了。。。 所以我尝试了很多技巧,我在inet中找到了evrywhere,也从这里找到了一些技巧-但它们都不起作用(比如重建designerfile,将新的链接按钮写入aspx文件,我还确保该文件位于正确的文件夹中等等),什么都不起作用。 所以我手工将它们添加到designer.cs中。现在我可以在CodeBehind中“使用”它们,但是当我开始调试时,它会遇到这个错误


如果您能帮助我,那就太好了,这太烦人了…

因为您使用的是Gridview,所以您必须使用事件
RowDataBound
作为Gridview

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

之后,您可以使用

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

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

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

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

name.visible=false;

顺便说一句,如果你需要更多的代码,请告诉我!是否也可以通过PreRenderComplete中的GV.FindControl找到它?我已经准备好了RowDataBound,因为我在那里插入了一些东西,所以不会有问题。仅用于Interest。理论上,只要gridview是绑定的,您就可以在它的所有行上循环。好的:)但是您还知道为什么它从designer.cs文件中删除了旧的LB,而在我重建它时没有添加新的LB吗?只是一个简单的问题,如果你不知道它也没关系:没有添加DIt,因此你无法引用它,因为它实际上并不存在。:)它只在网格数据绑定时存在。是的,但是我需要先执行一个RowCommand,我不希望任何用户(仅管理员)拥有那些会有RowCommand的linkbutton。
LinkButton name = (LinkButton)gridview.Rows[index].FindControl("lnkbtnActionNames");

name.visible=false;