2013-08-01 46 views
2

我有一個簡單的事情,我已經做了像百萬次,但這次,我不能。無法更改CodeBehind中的LinkBut​​tons的屬性

我了LinkBut​​ton在我的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> 

而那些我有六次。 Allways one Edit和一個Delete-LinkBut​​ton。

然後我嘗試在5號線改變它們的可見的代碼隱藏(如果我把它註釋掉,然後在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; 

但永諾帶給我的goodknown例外:

操作無效由於對象的當前狀態

嗯 - 我敢肯定,對象的心不是空那裏了?! (和會話[「權限」]當然不是空,因爲它正在預加載狀態...)

也許我不得不告訴你更多,因爲我有問題與那些LinkBut​​tons bevore ^^ 所以 - 在那些TemplateFields中我有完全相同的LinkBut​​tons,然後我改變了那些LB的名稱,從那時起我就無法在CodeBehind中使用它們。 這是因爲他們werent在設計器文件了... 所以我嘗試了很多技巧,我發現在inet evrywhere,也從這裏提示 - 但他們沒有工作(如重建設計器文件,將LinkBut​​tons新寫入aspx-文件也我確保該文件在正確的文件夾等...)沒有工作。 所以我將它們手動添加到designer.cs中。現在我可以在CodeBehind中「使用」它們,但是當我開始調試時 - 它會遇到這個錯誤。

將是非常好的,如果你能幫助我,這是很討厭......

+0

順便說一下告訴我,如果你需要更多的代碼也找到RowCommand事件! – DatRid

回答

1

由於您使用一個GridView,你將不得不使用事件RowDataBound爲GridView。

在這種情況下,您將不得不檢查e.Row.RowType == DataControlRowType.DataRow

之後,您可以使用

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

獲得當前行LinkBut​​ton的,然後用lb.Visible = false;或任何代碼,你需要的。

+0

是否有可能通過PreRenderComplete中的GV.FindControl找到它? RowDataBound已經準備就緒,因爲我在那裏插入了一些東西,所以它不會有問題。只是爲了停車。 – DatRid

+0

理論上,只要綁定了GridView中的所有行就可以遍歷。 – NoLifeKing

+0

好吧:)但你也知道爲什麼它從designer.cs文件中刪除舊的LB,並沒有添加新的時,我重建它?只是一個獎金問題,如果你不知道它也可以:D – DatRid

2

您可以通過這種方式

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

name.visible=false; 
+0

是的,但我需要先執行RowCommand,並且我不希望任何用戶(僅管理員)擁有那些將具有RowCommand的LinkBut​​ton。 – DatRid