2

我已经做了一百万次我已经做了百万次的简单的事情,但这次,我不能。

我的 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>

而那些我有六次。总是一个编辑和一个删除链接按钮。

然后我尝试在第 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 中获得了他的状态......)

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

如果你能帮助我,那就太好了,这太烦人了......

4

2 回答 2

2

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

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

name.visible=false;
于 2013-08-01T07:05:11.133 回答
1

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

在这种情况下,您将不得不检查e.Row.RowType == DataControlRowType.DataRow.

之后,您可以使用

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

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

于 2013-08-01T06:50:57.723 回答