同じページに2つのFormviewがあります。最初は問題なくFindControlを使うことができますが、常に2番目のもので失敗します。FormView.FindControlはあるフォームでは動作しますが、同じページでは動作しません
両方ともItemTemplateを使用していますが、どちらもデフォルトのReadOnlyで、どちらもSQLDataSources(別のもの)にバインドされていますが、私の人生にとってFindControlはなぜ機能しないのでしょうか。
私は以下のコードから多くのプレーンテキストを削除しました。
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:SoftSaleDBConnectionString %>"
SelectCommand="SELECT * FROM [Apps] WHERE ([AppID] = @AppID)" >
<SelectParameters>
<asp:FormParameter FormField="AppID" Name="AppID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<asp:FormView ID="FormView1" runat="server" DataKeyNames="AppID"
DataSourceID="SqlDataSource1">
<ItemTemplate>
<h1>
<asp:Label ID="AppNameLabel" runat="server" Text='<%# Bind("AppName") %>' />
<asp:Label ID="VersionLabel" runat="server" Text='<%# Bind("Version") %>' /> for
<asp:Label ID="OSLabel" runat="server" Text='<%# Bind("OS") %>' />
</h1>
<p>Text here</p>
<p><asp:TextBox ID="LicenseTextBox" runat="server"
Text='<%# Eval("License")%>'
TextMode="MultiLine" Width="800px" Rows="25" ReadOnly="True"></asp:TextBox></p>
<asp:HiddenField ID="AppLocation" runat="server" ViewStateMode="Inherit" Value='<%# Bind("AppLocation") %>'/>
</ItemTemplate>
</asp:FormView>
<p><asp:Literal ID="SizeLiteral" runat="server"></asp:Literal></p>
<asp:SqlDataSource ID="SqlDataSource4" runat="server"
ConnectionString="<%$ ConnectionStrings:SoftSaleDBConnectionString %>"
SelectCommand="SELECT * FROM [Installations] WHERE (([AppID] = @AppID) AND ([Username] = @Username))" >
<SelectParameters>
<asp:FormParameter FormField="AppID" Name="AppID" Type="Int32" />
<asp:FormParameter FormField="Username" Name="Username" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:FormView ID="DLFormView" runat="server" DataSourceID="SqlDataSource4"
DataKeyNames="AppID,Username">
<ItemTemplate>
<p> <asp:Label ID="DLAppNameLabel" runat="server" />
<br />
<br />
<asp:Label ID="NumberOfInstallations" runat="server" Text='<%# Bind("Installations") %>'></asp:Label>
<br />
<asp:HiddenField ID="TotalInstallations" runat="server" />
Number of New Installations:
<asp:DropDownList ID="NumberOfNewInstallations" runat="server">
</asp:DropDownList>
<br />
<asp:Label ID="TotalNumberOfInstallations" runat="server" Text="Label"></asp:Label>
</p>
</ItemTemplate>
</asp:FormView>
し、次のようにFindControlコーディングがある...
TextBox LicTextBox = (TextBox)FormView1.FindControl("LicenseTextBox");
HiddenField AppLocCode = (HiddenField)FormView1.FindControl("AppLocation");
Label AppNameCode = (Label)FormView1.FindControl("AppNameLabel");
これらは常に仕事...
Label DLAppNameCode = (Label)DLFormView.FindControl("DLAppNameLabel");
はこの常にnullを返します。私は、データバインディングが完了するまでレンダリングされないコントロールについて百万分の一を読んだが、確かに2つのFOrmViewsが同じ方法で設定されている場合、結果は同じになるはずです。
すべてのヘルプは非常にapreciatedされるだろう:)
マットを:)
私はちょうど私もSqlDataSourcesレコードを戻ってきているし、彼らの両方があるかどうかをチェックしたことを追加したいと思います。 –
コードをステップ実行してTextBoxにアクセスしたときに気付いたことがあるLicTextBox =(TextBox)FormView1.FindControl( "LicenseTextBox"); 'デバッガはaspxページにジャンプし、FormView1のすべてのASPフィールドを調べます。私が 'Label DLAppNameCode =(Label)に到達すると、DLFormView.FindControl(" DLAppNameLabel ");'コードはaspxページにジャンプせず、したがってadpコントロールを検索しません。誰でも知っている理由は? –
私はもう役に立たないことをいくつか試しました。私はaspxページにDLFormViewを置いて、FormView1の前にDLFormViewでラベルを見つけようとしました。私はページ上の他のコントロールでFindControlを使用しようとしましたが、ページレベルであっても、まったく見つからないでしょう(このアイデアはラベルの親を見つけてそのオブジェクトを使ってラベルを見つけることでした)。 FindControlはFormView1でのみ機能し、私はその理由を調べることができません。助けていただければ幸いです。 :) –