2017-05-09 31 views
0

私は最初の列にリンクボタンを持つGridviewを持っています。リンクボタンをクリックすると、ウィンドウを開きたいのですが、リンクボタンを無効にしたい場合もあります。リンクボタンが無効になっていない、グリッドビューでリンクボタンを無効にする方法は?

役に立たなかった リンクボタンをクリックすると、ウィンドウの動作が期待されます。ただし、リンクボタンは無効になっていません。したがって、何度も繰り返しクリックすることが許されています。

フロントエンドは、次のとおりです。

<asp:LinkButton runat="server" ID="lnkbtnView" CommandArgument='<%# Eval("Id")%>' OnCommand="GetViewOnClientClick" >View<br/></asp:LinkButton> 

GetviewonClientClick方法:予想通り

protected void GetViewOnClientClick(object sender, EventArgs e) 
{ 
    LinkButton lb = (LinkButton)sender; 
    GridViewRow row = (GridViewRow)lb.NamingContainer; 
    if (row != null) 
    { 
     int index = row.RowIndex; 

     LinkButton link = (LinkButton)row.FindControl("lnkbtnView"); 
     link.Enabled = false; 
    } 
} 

なぜ動作しませんか? これは私が解決したいことです。私は再バインドや何か関連する必要があるかもしれないと思うが、実際に何が起こっているのかよくわからない。したがって、私はそれを実装する方法を知らない。

+0

'lb.Enabled = falseは、私はそれをテストしたとき、'しかし、両方のケースではそれが動作します。または、ポップアップウィンドウがPostBackを妨げている場合、 'GetViewOnClientClick'は決して起動されません。しかし、私は上記のスニペットでそれをテストすることはできません。 – VDWWD

+0

link.Enabled = false;元の投稿には、提案されている修正と同じ機能があります。 –

答えて

0

その方法でコントロールを編集するソリューションが見つかりませんでした。私が代わりにしたのは、グリッドビューイベントのサイクルを読むことでした。

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview_events(v=vs.110).aspx

前のリンクを読めば、あなたは、レコードをクリックしたら、RowDataBoundイベントへの呼び出しをトリガするために起こっていることを知っていますよ。したがって、 RowDataBoundイベントでは、コントロールにアクセスし、ロジックを適用してコントロールのプロパティ(色、無効、有効など)を編集します。

このグリッドビューには2種類のレコードがあるため、どのレコードがクリックされたかを保存して永続化する必要がありました。

は、これがクリックされた行を追跡するために私の修正です:あなたは、単に行うことができ

protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      gvs.SetHeaderArrows(e); 
     } 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      int Id = (int)(e.Row.RowIndex); 
      int? inspID = convert.ToIntQ(DataBinder.Eval(e.Row.DataItem, "InspectionID")); 
      string rowclicked = string.Format("clickedrow{0}", Id); 

      if (convert.ToIntQ(Session[rowclicked]) != null) 
      { 

       if (Id == Convert.ToInt32(Session[rowclicked])) 
       { 
        LinkButton button = (LinkButton) e.Row.FindControl("lnkbtnView"); 
        button.ForeColor = Color.Gray; 
        button.Enabled = false; 

       } 

       else 
       { 
        LinkButton button = (LinkButton)e.Row.FindControl("lnkbtnView"); 
        button.ForeColor = Color.DarkBlue; 
        button.Enabled = true; 

       } 

      } 
関連する問題