2011-01-20 27 views
0

我需要基于该行中另一列的值以编程方式禁用某个GridView中的某些超链接。我决定处理OnRowDataBound事件以在运行时迭代并设置它们。这大部分工作,除了我需要到HyperLink对象。我该怎么做?从RowDataBound事件中获取超链接对象

这里就是我在

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 
     } 
    } 

UPDATE 的转换结果将不能正常工作。我收到一个关于无法将TableCell类型转换为Hyperlink的错误。 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> 

回答

1

尝试搜索的控制。

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

这可行,但您必须先将其转换为模板字段。有了Visual Studio,我只需进入设计视图,只需点击超链接即可“将字段转换为模板字段”。然后我有一个ID来引用我的HyperLink。 – 2011-01-20 17:59:45

0

尝试

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