1

CheckPara は私の OnDataBinding プロシージャです

SqlDataSource1 は ObjectDataSource です (紛らわしい名前です)

言語はNemerleですが、C#を知っていれば簡単に読めます

  protected virtual CheckPara(_ : object,  _ : System.EventArgs) : void
      {
        foreach(x is Parameter in SqlDataSource1.SelectParameters)
            when(x.DefaultValue=="") //Cancel binding
      }

完全に構成された ObjectDataSource がない場合、どうすればバインドをキャンセルできますか?

または...すべてのパラメーターを使用した場合にのみバインドを実行するにはどうすればよいですか?

4

2 に答える 2

3

ObjectDataSource の Selecting イベントを使用し、select の for ループを配置します。バインドをキャンセルする場合は、e.Cacnel = true を使用して完了です!!

于 2010-03-24T11:27:53.007 に答える
1

ASP.NET はデフォルトではバインドしません。に電話する必要がありますDataBind。呼び出すPage.DataBindと、すべてのコントロールのDataBindメソッドが呼び出されます。DataBindしたがって、準備ができたらコントロールを呼び出すだけです。Page.DataBindを使用する場合、通常は呼び出しませんObjectDataSource

ObjectDataSourceWeb フォーム (aspx) ページでを宣言した場合、コントロールのDataBindメソッドは、イベントの直後Page.Load、コントロールのイベントの前に呼び出されLoadます。およびイベントが役立つ場合がありますObjectCreatingObjectCreated以下は、ビジネス オブジェクトの接続文字列を設定するサンプルです。


<asp:ObjectDataSource 
    ID="__definitionCategoryDataSource" 
    runat="server" 
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="GetData" 
    TypeName="Missico.Data.DefinitionDataSetTableAdapters.DefinitionCategoryTableAdapter">
</asp:ObjectDataSource>

Protected Sub __definitionCategoryDataSource_ObjectCreated( _
    ByVal sender As Object, _
    ByVal e As System.Web.UI.WebControls.ObjectDataSourceEventArgs) _
    Handles __definitionCategoryDataSource.ObjectCreated

    If e.ObjectInstance IsNot Nothing Then
        SetObjectDataSourceConnectionString(e.ObjectInstance, DataManager.ConnectionString)
    End If

End Sub

Public Sub SetObjectDataSourceConnectionString( _
    ByVal objectInstance As Object, _
    ByVal connectionString As String)

    If objectInstance IsNot Nothing Then

        Dim oConnection As System.Data.Common.DbConnection

        oConnection = objectInstance.GetType.GetProperty("Connection").GetValue(objectInstance, Nothing)
        oConnection.ConnectionString = DataManager.ConnectionString

    End If

End Sub
于 2010-03-24T06:53:01.803 に答える