我已经厌倦了一件非常简单的事情,我已经完成了数百万次,但这一次,我不能。
我的Gridview中有LinkButtons,如
<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-LinkButton。
然后我尝试在第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中获得了他的状态...)
也许我必须告诉你更多,因为我确实遇到了那些LinkButtons bevert的问题^^ 所以 - 在那些TemplateFields我有完全相同的LinkButtons,然后我改变了那些LB的名称,从那时起我就不能在CodeBehind中使用它们。 这是因为他们不再在设计师档案中...... 所以我尝试了很多我在inet中找到evrywhere的提示,也来自这里的提示 - 但是它们没有用(比如重建设计器文件,将LinkButtons新写入aspx文件也确保文件位于正确的文件夹等) ...)没有任何效果。 所以我把它们手工添加到designer.cs中。现在我可以在CodeBehind中“使用”它们,但是当我开始调试时 - 它会遇到这个错误。
如果你能帮助我真的很好,这太烦人了......
答案 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;
或您需要的任何代码。