【问题标题】:Getting hyperlink object out of the RowDataBound event从 RowDataBound 事件中获取超链接对象
【发布时间】:2011-01-21 01:55:27
【问题描述】:

我需要根据行中另一列的值以编程方式禁用网格视图中的某些超链接。我决定处理 OnRowDataBound 事件来迭代并在运行时设置它们。这主要是有效的,除了我需要访问 HyperLink 对象。我该怎么做?

这就是我所在的地方

    protected void IncomingTransfersGv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        // COLUMN OFFSET IN USE
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            object[] dataitems = ((DataRowView)e.Row.DataItem).Row.ItemArray;
            string carrier = (string)dataitems[7].ToString();

            if (carrier.ToLower() == "hand")
                (dataitems[8] as HyperLink).Enabled = false;//How can I get the hyperlink object here?  dataitems[8] only gives me the column's value..I don't need this
        }
    }

更新 转换不起作用。我收到关于无法将类型 TableCell 转换为超链接的错误。 HyperLinkField 没有 ID 属性。根据article,我将超链接字段更改为模板字段,这应该以某种方式使这更容易,但不幸的是,这篇文章没有说明如何......任何想法?

        <asp:TemplateField HeaderText="Tracking">
            <ItemTemplate>
                <asp:HyperLink ID="HyperLink1" runat="server" 
                    NavigateUrl='<%# Eval("trackingUrl", "{0}") %>' 
                    Text='<%# Eval("trackingNumber", "{0}") %>'></asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>

【问题讨论】:

    标签: c# gridview asp.net-3.5


    【解决方案1】:

    尝试搜索控件。

    HyperLink hl = (HyperLink)e.Row.FindControl(ControlName)
    

    【讨论】:

    • 这可行,但您必须先将其转换为模板字段。使用 Visual Studio,我所要做的就是进入设计视图,它让我只需单击一个超链接即可“将字段转换为模板字段”。然后我有一个 ID 来引用我的 HyperLink。
    【解决方案2】:

    试试

     var hyperLink = (HyperLink)e.Row.FindControl(e.Row.Cells[8].Text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多