2012-06-25 3 views
1

У меня есть гиперссылка в поле шаблона. Я хочу включить и отключить гиперссылку на основе ее значения. Скажем, если Id is "ABC" Я хочу отключить гиперссылку. Я попробовал код ниже, но он не работал для меня.Как включить или отключить гиперссылку в gridview?

Enabled='<%# Convert.ToString(Eval("Id"))!= "ABC" ? true: false %>' 

Я попытался следующие в коде позади:

protected void gridResult_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HyperLink status = (HyperLink)e.Row.Cells[2].Controls[0]; 
     if (status != null && status.Text == "ABC") { 
      status.Enabled = false; 
     } 
    } 
} 

Но она возвращается null каждый раз.

<asp:TemplateField HeaderText="Id"> 
         <ItemTemplate> 
          <% if (WebApp.Common.Auth.Admin()) { %> 
           <a href="../../Edit/Default.aspx?<%= WebApp.Edit.Default.P_ID %>=<%# DataBinder.Eval(Container.DataItem, "Id") %>&amp;r=<%= buildPostBackPortion() %>"><%# DataBinder.Eval(Container.DataItem, "Id") %> Enabled='<%# Convert.ToString(Eval("Id"))!= "ABC" ? true: false %>' 
</a> 
          <% } else { %> 
           <%# DataBinder.Eval(Container.DataItem, "Id") %> 
          <% } %> 
         </ItemTemplate> 
         </asp:TemplateField> 
+1

показать полный шаблон сайта пожалуйста ... – naveen

+0

Naveen, я обновил свой вопрос с помощью шаблона. Взгляни, пожалуйста. – Ranjith

ответ

2

Когда мне нужно сделать что-то, как вы описали, я использую следующие:

ASPX:

<asp:TemplateField HeaderStyle-CssClass="cell-action" ItemStyle-CssClass="cell-action"> 
    <ItemTemplate> 
     <asp:HyperLink ID="viewHyperLink" runat="server" Text="View" /> 
     <asp:Label ID="messageLabel" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

C#:

protected void reportedIssuesGridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    RowDataType row; 
    HyperLink viewHyperLink; 
    Label messageLabel; 

    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem is RowDataType) { 
     row = (RowDataType)e.Row.DataItem; 
     viewHyperLink = (HyperLink)e.Row.FindControl("viewHyperLink"); //Gets the HyperLink 
     messageLabel = (Label)e.Row.FindControl("messageLabel"); //Gets the Label 
     if (row.Id != "ABC") 
     { 
      viewHyperLink.Visible = true; 
      viewHyperLink.NavigateUrl = "~/Edit/Default.aspx?P_ID" + row.Id; 

      messageLabel.Visible = false; 

     } 
     else 
     { 
      viewHyperLink.Visible = true; 

      messageLabel.Visible = true; 
      messageLabel.Text = row.Id; 
     } 
    } 
} 

Где RowDataType это имя из тип данных строки.

Если вам нужна дополнительная помощь или у вас есть вопросы, задайте вопросы. Если это решает вашу проблему, пожалуйста, примите.
FYI: ставка приема 25% ДЕЙСТВИТЕЛЬНО плохо. Вы должны попытаться получить это, приняв ответы.

Обновление: Изменен код использования messageLabel.

+0

Нужно ли добавить любую ссылку для использования RowDataType? – Ranjith

+0

@Ranjith 'RowDataType' следует заменить типом данных, которые вы привязываете к GridView. Например, если вы привязываете массив строк к GridView, тогда 'RowDataType' будет заменен на' string'. – Trisped