【问题标题】:How to enable and disable the hyperlink in gridview?如何在gridview中启用和禁用超链接?
【发布时间】:2012-06-25 16:39:40
【问题描述】:

我在模板字段中有一个超链接。我想根据其值启用和禁用超链接。假设Id"ABC" 我想禁用超链接。我尝试了下面的代码,但它对我不起作用。

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>

【问题讨论】:

  • 请显示您的完整模板字段...
  • Naveen,我用 templatefiled 更新了我的问题。请看一看。

标签: c# asp.net gridview itemtemplate templatefield


【解决方案1】:

当我需要按照您的描述做某事时,我会使用以下内容:

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是行数据类型的名称。

如果您需要更多帮助或有更多问题,请提出。如果这解决了您的问题,请接受。
仅供参考:25% 的接受率真的很糟糕。您应该尝试通过接受答案来解决这个问题。

更新:将代码更改为使用 messageLabel。

【讨论】:

  • 是否需要添加任何引用才能使用 RowDataType?
  • @Ranjith RowDataType 应替换为您绑定到 GridView 的数据类型。例如,如果您将字符串数组绑定到 GridView,则 RowDataType 将替换为 string
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多