2012-01-18 2 views
2

Gridviewのデータベースから取得したフィールドを処理して、その中の情報がハイパーリンクであるかどうかをチェックします。そうであれば、私はそれからリンクを生成したい、そうでなければ生のテキストとして残すだけです。 GridViewのフィールドがどのように見える瞬間に:Gridviewのバインドされたフィールドでコールバックを実行

<asp:TemplateField HeaderText="Reference"> 
     <EditItemTemplate> 
      <asp:TextBox ID="txtReference" runat="server" Text='<%# Bind("Reference") %>'></asp:TextBox> 
     </EditItemTemplate> 
     <ItemTemplate> 
      <asp:Label ID="Label3" runat="server" Text='<%# Bind("Reference") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

私はItemTemplateにの「テキスト」の属性が、私は私に入れて何にかかわらずに何の変更を試みたpageloadにエラーが発生します。このフィールドにバインドされた特定の情報に基づいてブラウザに送信されたものを動的に変更するにはどうすればよいですか?

ありがとうございます!

+0

これがあなたを助けた場合は、回答としてマークしてください。 – Brissles

答えて

0

私は、バインドされたテキストが正しいURLとして適格であればHyperLinkを示した(とLabelを隠して)、私のTemplateFieldLabelHyperLinkの両方を使用することによって、これを修正しました。私はこのようなページ '分離コード' に機能を追加しました

<asp:TemplateField HeaderText="Reference"> 
    <ItemTemplate> 
       <asp:Label ID="lblReference" runat="server" Visible='<%# !isTextHyperlink(Eval("Reference")) %>' Text='<%# Bind("Reference") %>'/> 
       <asp:HyperLink ID="hlReference" runat="server" Visible='<%# isTextHyperlink(Eval("Reference")) %>' Text='<%# Bind("Reference") %>' NavigateUrl='<%# Bind("Reference") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

ASP.NET

次ASP.NETは、出力への潜在的なHTMLを設定しますC#

protected bool isTextHyperlink(object refobj) 
{ 
    string refstring = refobj.ToString(); 
    try 
    { 
     Uri uri = new Uri(refstring); 
     return Uri.CheckSchemeName(uri.Scheme); 
    } 
    catch 
    { 
     // not a valid uri (that Uri can construct with) 
     return false; 
    } 
} 

Brisslesに感謝します。

1

は、あなたが例えばFindControlと行のコントロールにアクセスすることができます

protected virtual void yourGV_OnRowDataBound(object sender, gridViewRowEventArgs e) 
{ 
    GridViewRow row = e.Row 
} 

内部のようなGridView.OnRowDataBoundメソッドを使用することができます。

バウンドテキストが正しいURLとして適格であればあなたの TemplateFieldLabelHyperLinkの両方を使用して HyperLinkを表示(および Labelを隠す)ことができ
2

ASP.NET

<asp:TemplateField HeaderText="Reference"> 
    <ItemTemplate> 
     <asp:Label ID="lbl" runat="server" Visible='<%# IsTextHyperlink(Eval("Reference")) %>' Text='<%# Bind("Reference") %>'/> 
     <asp:HyperLink ID="hl" runat="server" Visible='<%# !IsTextHyperlink(Eval("Reference")) %>' NavigateUrl='<%# Bind("Reference") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

C#

protected bool IsTextHyperlink(object text) 
{ 
    bool IsHyperLink = false; 
    ... 
    // check if text qualifies as hyperlink 
    ... 
    return IsHyperLink ; 
} 

注型を使用して:あなたは、このような分離コードVisibleプロパティにブール値を返す関数、何かを使用してこれを行うことができますIsHyperLink関数パラメータの場合はobject、Eval()はオブジェクトを返すので、文字列にキャストします。

HyperLinkTextプロパティを意味のあるものにフォーマットすることもできます。

関連する問題