0

これがパズルです。マスター ページのデータ ソースは、その SelectParameter で、(孫) 子ページのテキストを含むラベル コントロールを参照します。

<asp:SqlDataSource ... SelectCommand="SELECT * FROM [tblMyTable] WHERE (([strField] = ?) ">
            <SelectParameters>
                <asp:ControlParameter Name="strField" ControlID="cphMaster$cphChild$lblGrandchild" propertyname="Text" DbType="String"/>
            </SelectParameters>
        </asp:SqlDataSource>

ただし、これによりエラーが生成されます (「System.Data.OleDb.OleDbException: 条件式のデータ型が一致しません。」)

明らかなことを確認しました (strField は実際には文字列であり、ContentPlaceHolder (cph) コントロールは ID によって正しく識別されます)。何か案は?

そして、「ContentPlaceholderに配置されたコントロールを読み取るControlParameter」の基本的なアプローチは、値をSelectParameterに渡す合理的な方法ですか?

4

4 に答える 4

0

子ページの .cs ファイルで次のコードを使用できます。

SqlDataSource ds = this.MasterPage.FindControl("datasourceid");
// now you can custimize this ds according to your problem
于 2013-05-31T07:21:34.000 に答える
0

私の方法は問題ないことがわかりました。私の実際のアプリケーションでは、いくつかの基準がありましたが、問題は、SelectParameters が WHERE 句の基準と同じ順序になっていないことでした。順序が同じ場合、メソッドは機能します。

そう:

SELECT * FROM [myTable] WHERE [FieldA] = ? AND [FieldB] = ? AND [FieldC] = ?

ニーズ:

   <SelectParameters>
      <asp:ControlParameter Name="FieldA" ControlID="cphMaster$cphChild$lblGrandChildA .../>
      <asp:ControlParameter Name="FieldB" ControlID="cphMaster$cphChild$lblGrandChildB .../>
      <asp:ControlParameter Name="FieldC" ControlID="cphMaster$cphChild$lblGrandChildC .../>
   </SelectParameters>

つまり、ACB などではありません。マスター/子 (/孫) 構造から発生する可能性があるこの動作に遭遇したことはありません。これが他の人に役立つことを願っています。

于 2013-05-31T08:24:18.777 に答える
0

おめでとうございます。問題を解決できたようです。ユーザーがさまざまなブラウザー (例: IE、Firefox、Chrome、Safari) を使用できるようにする場合。コントロールの生成 ID が同じかどうかを確認する必要がある場合があります。一部のブラウザーでは、アンダースコアcphMaster$cphChild$lblGrandChildAのようにレンダリングされますが、ユーザーが 1 つのブラウザーのみを使用できるようにする場合は、問題にはなりません。cphMaster_cphChild_lblGrandChildA

于 2013-05-31T12:39:58.710 に答える
0

子ページにアクセスできるマスター ページ クラスに SQLDataSource 型のパブリック プロパティを作成することをお勧めします。

YourMasterPage.vb (マスター ページのクラス名は YourMasterPage)

Private _mastersqldatasource as SqlDataSource
Public ReadOnly Property MasterSQLDataSource() As SqlDataSource
        Get
            Return SqlDataSource1
        End Get
End Property

その後、子ページにアクセスできます

dim myMasterPage as YourMasterPage
myMasterPage = DirectCast(Me.Page.Master, YourMasterPage)
myMasterPage.MasterSQLDataSource.SelectParameters("strField").DefaultValue = lblGrandChild.Text

これが役に立てば幸いです。私はあなたの場合にこの方法を使用していました

于 2013-05-30T18:43:01.837 に答える