0

を扱っていFormViewます。
私はばかげた長い入力フォームを持っているので、すべてのコントロールをプログラムでコピーする方法があるかどうか疑問に思っていたので、入力さItemTemplateれた情報は両方で同じでInsertItemTemplate/UpdateItemTemplateあるため、すべてのテキストボックス/ DDLなどを繰り返す必要はありません.aspx/Insert を更新します (コピー / 貼り付けできることは既にわかっていますが、.aspx既に十分に面倒です)。

設定することができInsertItemTemplate = ItemTemplate、モードを挿入に設定すると、フィールドがすべて表示されます。問題は、送信イベントで a を実行しようとすると、FindControl常に null になることです。

4

2 に答える 2

0

レイアウトを保持するユーザー コントロールを作成できます。コントロールを Web ページに登録します。

<%@ Register TagPrefix="ctrl" TagName="FormControl" Src="FormControl.ascx" %>

そしてそれをに追加しますFormView

<asp:FormView ID="FormView1" runat="server" 
DataSourceID="ObjectDataSource1" 
AllowPaging="True" EnableViewState="False">

  <ItemTemplate>
    <ctrl:FormControlID="MyControl1" runat="server" Mode="Item"/>
  </ItemTemplate>
  <InsertItemTemplate>
    <ctrl:FormControlID="MyControl2" runat="server" Mode="InsertItem"/>
  </InsertItemTemplate>
</FormView>

Mode選択したモードに応じてコントロール内のレイアウトを変更する可能性があるため、引数を追加しました。

于 2013-05-09T02:19:24.500 に答える
0

ItemTemplate のすべてのコントロールをコンテナー (パネルなど) に配置すると、その panel.Controls プロパティを介してコードでそれらにアクセスできます。これを繰り返して、それらを他のテンプレートのパネルに追加できます...単なるアイデアです... :)

foreach (myItemPanel.controls の変数項目) myInsertPanel.controls.add(item)

元のコントロールを相互にネストしている場合は、それを foreach ループに反映する必要があります...

于 2013-05-08T18:57:36.967 に答える