2011-06-24 13 views
0

ここでは、gridview内に2linkbuttonsを持つテンプレートフィールドがあります。 はどうすればlnkbuttonsの一つは、私はテンプレートフィールドで2 linkbuttonsを使用して、これをやっているユーザ選択グリッドビューでリンクボタンを動的に非表示にする

 <asp:TemplateField HeaderText="Action"> 
     <ItemTemplate> 
     <table> 
     <tr> 

     <td align="center"> 
     <asp:LinkButton ID="LinkButton1" runat="server" CommandName= "Publish" CommandArgument="<%# Container.DataItemIndex %>"></asp:LinkButton> 
     </td> 

     <<td align="center"> 
     <asp:LinkButton ID="LinkButton2" runat="server" CommandName= "Block" HeaderText="Block" CommandArgument="<%# Container.DataItemIndex %>">Block</asp:LinkButton> 
     </td> 

     </tr> 
     </table> 
     </ItemTemplate> 

     </asp:TemplateField>  


protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 


    if(Status=="Posted") 
    { 
      LinkButton lbtn2 = (LinkButton)e.Row.FindControl("LinkButton2"); 
      lbtn2.Visible = false; 
    } 
    if(Status=="Publish") 
     { 
       LinkButton lbtn1 = (LinkButton)e.Row.FindControl("LinkButton1"); 
       lbtn1.Visible = false; 
     } 
    } 

に応じて非表示にします。 Status == Postedの場合、LinkBut​​ton2を非表示にします。 ItemType == Publishedの場合、LinkBut​​ton1を非表示にします。

私は

LinkButton lbtn2 = (LinkButton)e.Row.FindControl("LinkButton2"); 
lbtn2.Visible = false; 

エラー...でエラーを取得しています唯一のLinkBut​​tonコントロールを使用して、心とaspx.cs`

にコマンド名とcommandArgumentを設定していない

:オブジェクト参照に設定されていませんlnbt2.Visible = falseを指すインスタンス。

任意の手がかり、 おかげ 日

答えて

0

チェックはそう、現在の行は、ヘッダーやフッターがあるため、問題の行は、データ行ではなく、ヘッダー、などの問題はおそらくされていることを確認しますコントロールにはコントロールが含まれておらず、例外がスローされます。

protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if(Status=="Posted") 
     { 
      LinkButton lbtn2 = (LinkButton)e.Row.FindControl("LinkButton2"); 
      lbtn2.Visible = false; 
     } 
     if(Status=="Publish") 
     { 
      LinkButton lbtn1 = (LinkButton)e.Row.FindControl("LinkButton1"); 
      lbtn1.Visible = false; 
     } 
    } 
} 
+0

あなたが正しいです。コードをDataControlRowType.DataRowに移動しました。私は何もエラーは出ませんが、テンプレートフィールドアクションはLinkbuttonsなしで空です – Sun

+0

@Sun:コードサンプルの "Status"とは何ですか?あなたが削除した変数を割り当てるコードがありますか?または、ステータスはデータバインドされるオブジェクトのプロパティですか?そのイベントハンドラにブレークポイントを設定してStatusの値を調べると、何が得られますか? –

+0

ステータスはItemStatusです。私たちは投稿または公開できるアイテムを持っています。 – Sun

0

私はこれが古いと知っていますが、私は同じことを探していました。私はまた、このようにそれを行うことができたし、参考のためにだけ掲載:

これは、リストビューにあるが、GridViewコントロールで同じである必要があります。

<asp:LinkButton ID="btnForms" runat="server" Text='MyButton' CommandName="MyCommandName" 
Style='<%#GetHiddenTag(Eval("Status").ToString())%>' CommandArgument='<%#Eval("Status")%>' OnClick="MyOnClickCodeBehind" /> 

は、分離コード:

public string GetHiddenTag(string Status) 
    { 
     if (Status.ToLower() == "completed") 
      return "visibility:hidden;"; 

     return "visibility:visible;"; 
    } 
関連する問題