2012-04-09 15 views
3

EditItemTemplateのTextBoxをバインドしたいのですが、テキストボックスの元の値を関数に渡してから表示する必要があります。私の目標は、それを表示する前に値をフォーマットすることです。複雑な書式設定ルールなので、組み込みフォーマッタは使用できません。 Eval()で作業するときは簡単ですが、Bind()では別の話です。私はそれがコードビハインドのイベントを使用して行うことができますが、私はすべてaspxページからそれをやろうとしていた知っている。TextBoxをバインドするときにメソッドを呼び出す方法

例:

<asp:TextBox Id="TextBox1" runat="server" Text='<%# FormatValue(Eval("Name"), Container.DisplayItemIndex) %>' /> 

そして、コードビハインドで:

<EditItemTemplate> 
     <asp:TextBox ID="NameTextBox" Text=<%# Bind("Name") %> MaxLength="255" runat="server" /> 
</EditItemTemplate> 

おかげで...このような

+0

私は一重引用符がないと思います。 'Text = '<%#Bind(" Name ")%>'' – MilkyWayJoe

+0

@MilkyWayJoe、この状況では引用符は使用しません。それは混乱を削減する。 – md1337

+0

イベントを使用してみませんか? –

答えて

3

何かがあなたが探しているものにかなり近いようになります。

public object FormatValue(object value, int itemIndex) 
{ 
    var input = GridView1.Rows[itemIndex].FindControl("TextBox1") as TextBox; 
    if (input != null) 
    { 
     //do whatever you need with the old value 
     var oldValue = input.Text.Trim(); 
    } 

    //format the value and send it back 
    return string.Format("My name is {0}", value); 
} 
+0

rsと同じコメント...関数呼び出しのコンテキストでバインドを使用することはできません。 – md1337

4

これはマークアップからはできません。 ASP.NETには、Bind構文を解析し、そのための特別なコードを生成する特別なケースのコードがあります。そのため、双方向データバインディングはBind()以外のものをサポートしていません。 ASP.NETでのbindメソッドが存在しない、多くの読者の驚きに

:あなたはエイロンリプトンによってHow ASP.NET databinding deals with Eval() and Bind() statements記事でこれに関する詳細な情報を見つけることができます! ASP.NETは、あなたのファイルを解析し、(角括弧パーセントポンドの形式で、"<%# %>")データバインディング 表現を使っている見て、それは Bind構文のために解析するために、特殊なケースのコードを持っており、特別ないくつかの を生成し、そのためのコード。 <%# Bind("Name") %>を使用すると、実際の 関数呼び出しではありません。 ASP.NETがコードを解析し、Bind() ステートメントを検出すると、ステートメントは2つの部分に分割されます。最初の部分は 一方向のデータバインディング部分であり、これはただ普通のものにすぎません。 ​​呼び出しです。 2番目の部分は逆の部分です。 は、通常、束縛された場所から戻って値を取得する"string name = TextBox1.Text" の行に沿ったコードです。

非バインド()データバインディング文リテラルコード(我々はCodeDomCodeSnippetExpressionsを使用)、その選択した言語 で任意のコードが許可されています。ただし、ASP.NETは Bind()ステートメントを解析する必要があるため、双方向データバインディングは よりもBind()をサポートしていません。それは任意のコードを呼び出し、同時にBind()を使用しようと ので、例えば、以下の構文が無効である: <%# FormatNameHelper(Bind("Name")) %>双方向データバインディングでサポートされている唯一のフォーマットはBind("field")Bind("field", "format string {0}")あります。

コードビハインドでこれを行うか、代わりにEvalメソッドを使用することを検討してください。

+0

私はEval()のように使うことができるBind()の別の構文があることを望んでいました。 – md1337

関連する問題