2

データバインドされたFormView内にTabContainerがあります(カテゴリ別に情報を表示するために例:クライアントバイオデータ、健康履歴、財務詳細...)。formViewの更新と挿入が機能しません(データベースにNULL値を投稿します)-FormViewがタブコンテナのタブパネル内にTextBoxを見つけることができないと思います。

一部のフォーラムでは、TabContainerの「INamingContainer」の実装(設計による)が原因であると述べています。ハックは、TabContainerのソースコード(ajax ctlツールキットのソースコード)を制御し、そこから「INamingContainer」インターフェイスを削除することです。 ..私の好みには複雑すぎます..私はちょっと迷っています。

さて、これを修正するための簡単でより良い方法はありますか?フォームビューを使用したほとんどの開発者の注文情報(タブコントロール)が一般的なニーズであるため、ツールキットがこの基本的な機能を実装できていないことに驚かされます。

よろしくお願いします、Jeewai

4

1 に答える 1

2

自分のスレッドに答える...私はasp.netフォーラムからいくつかの素晴らしい内部を得て、ここに解決策を投稿することにしました:私を助けた説明を再現する:

同じ問題に遭遇する可能性のある他のユーザーへのいくつかの質問が解決されることを願っています.

ベスト、JY

こんにちは、JY さん。

簡単に言えば、Bind ステートメントがコンパイルされるときに、挿入/更新の値を抽出する際にいくつかの制限があるということです。FormView 内のコントロールが別のネーミング コンテナー内にある場合 (TabContainer と TabPanel はどちらもネーミング コンテナーです)、コンパイラは TextBox から値を抽出する方法を解決できません。これについては、http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method- Dissected.aspx のブログで詳細に説明しています

これを回避するには、次のように値を手動で抽出する必要があります。

protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) { // コントロールへの参照を取得します TextBox LastNameTextBox= FormView1.FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LastNameTextBox") as TextBox;

// Set update parameters in datasource
ObjectDataSource1.UpdateParameters["LastName"].DefaultValue = LastNameTextBox.Text;

}

FindControl は現在の名前付けコンテナーのみを検索するため、TextBox に到達するには、各名前付けコンテナー (FormView、TabContainer、および TabPanel) を掘り下げる必要があります。

それが役立つことを願っています。

アーロン

引用符

于 2009-06-11T19:17:46.123 に答える