2011-01-20 10 views
0

行の別の列の値に基づいて、グリッドビュー内の特定のハイパーリンクをプログラムで無効にする必要があります。 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をハイパーリンクに変換できないというエラーが表示されます。 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

これは機能しますが、テンプレートフィールドに最初に変換する必要があります。ビジュアルスタジオでは、デザインビューに入るだけで、「フィールドをテンプレートフィールドに変換する」というハイパーリンクをクリックするだけでした。それから、私は自分のHyperLinkを参照するIDを持っています。 –

0

コントロールをもう一度検索してください

var hyperLink = (HyperLink)e.Row.FindControl(e.Row.Cells[8].Text) 
関連する問題