0

編集モード中に詳細ビューで値をトリミングする簡単な方法はありますか? データベースクエリを変更して値をトリミングしようとしましたが、その後、両方の方法でデータバインディングを行うのは好きではありませんでした。テキスト ボックス自体のすべてのプロパティを調べてみましたが、何も見つかりませんでした。

データバインド イベントのイベント ハンドラーを追加し、すべての値を 1 つずつ設定できることはわかっていますが、これは私が入社する前から存在していたアプリケーションであり、この詳細ビューには 40 を超える値がすべてテキスト ボックスに表示されています。それらが表す値や明白な命名スキームとはほとんど関係のない、一見ランダムな名前を使用します。

プロパティを反復処理する方法があるのではないかと思いましたが、DetailsView.Fieldsそこにも何もわかりませんでした。CHARスキーマを からに変更することはできませんVARCHAR。他に簡単なアイデアはありますか?このページは再び変更される可能性が高く、今後追加される新しいフィールドについて、余分な作業なしでこの問題を解決できる何かが欲しい. 残念ながら、再設計は今のところ最優先事項にはほど遠いので、この怪物を使用する際の頭痛の種を軽減するための迅速な修正が私が探しているすべてです.

4

1 に答える 1

4

免責事項: DetailsView ではなく GridView でこれを使用しましたが、概念は同じです。

EditItemTemplateField を作成し、データをテキスト ボックスにバインドし、文字列に変換して、文字列をトリミングします。

<Fields>
    <asp:TemplateField HeaderText="FirstName">
        <EditItemTemplate>
            <asp:TextBox ID="txtFirstName" Runat="server" Text='<%#Bind("FirstName").ToString().Trim() %>'/>
        </EditItemTemplate>
    </asp:TemplateField>
</Fields>

編集:残念ながら Eval が使用されている場合にのみ、データをバインドするときに変換を実行できないため、これは機能しません。

別の方法は、DetailsView の更新時に各コントロールを反復処理することです。

void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
    for (int i = 0; i < e.NewValues.Count; i++)
    {
        if (e.NewValues[i] != null)
        {
            e.NewValues[i] = e.NewValues[i].ToString().Trim();
        }
    }
}

この例では、ページ上のすべてのコントロールが文字列であることを前提としています。そうでない場合は、それらを除外する必要があります。

于 2010-07-07T21:38:20.043 に答える