2017-05-09 80 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事件,你將有機會獲得控制和應用邏輯編輯控件的屬性(如顏色,禁用,啓用了...)。

因此,因爲我有兩種類型的記錄在這個網格視圖,我需要存儲和使被點擊執着什麼記錄。

這是我的修復,以保持被點擊行的軌跡:

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; 

       } 

      }