从RowDataBound事件中获取超链接对象

时间:2011-01-20 17:30:39

标签: c# gridview asp.net-3.5

我需要以编程方式根据行中另一列的值禁用gridview中的某些超链接。我决定处理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属性。根据{{​​3}},我将超链接字段更改为模板字段,这应该会以某种方式使这更容易,但不幸的是文章没有说明如何...任何想法?

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

2 个答案:

答案 0 :(得分:1)

尝试搜索控件。

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

答案 1 :(得分:0)

尝试

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