0

ObjectDataSource.Select()を呼び出すと を呼び出すのと同じ結果が得られると思いObjectDataSource.DataBind()ましたが、場合によってはそうではないようです:

<asp:ObjectDataSource ID="ODS1" TypeName="PersonDB" SelectMethod="GetPeople" 
        runat="server"></asp:ObjectDataSource>

<br>

<asp:ListBox ID="ListBox1" DataSourceID="ODS1" DataTextField="PersonID" 
        AutoPostBack="true" runat="server"></asp:ListBox>

<br>

 <asp:ObjectDataSource ID="ODS2" InsertMethod="InsertEmployee" 
        TypeName="PersonDB" SelectMethod="GetPerson" runat="server"> 
           <SelectParameters>
              <asp:ControlParameter ConvertEmptyStringToNull="True" Name="PersonID"
                     PropertyName="SelectedValue" ControlID="ListBox1" />
           </SelectParameters>
 </asp:ObjectDataSource>

 <br>

 <asp:DetailsView ID="DetailsView1" AutoGenerateInsertButton="true" DataSourceID="ODS2"
        runat="server"> </asp:DetailsView>


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ODS1.Select(); //same as calling ODS1.DataBind();
    }

    if (IsPostBack)
    {
        ODS2.Select(); // returns no results
    }
}


上記のコードでは、ODS1.Select() を呼び出すと、ODS1.DataBind()呼び出した場合と同じ結果が生成されます。しかし、ポストバックでユーザーがListBoxのアイテムを選択した場合、ODS2.Select()は結果を返しませんが、ODS2.Select();を置き換えると、ODS2.DataBind(); を使用 その後、行が返されます。では、なぜ ODS2.Select();を実行しないのですか? すべての結果を返しますが、ODS2.DataBind(); しますか?


ありがとうございました

編集:

ユーザーがリストボックス内の項目を選択すると仮定すると --> ODS2.Select() を呼び出すと、何らかの理由で ODS2 が ListBox1.SelectedValue にバインドできず、このプロパティから値を抽出できないようです。

4

1 に答える 1

1

ODS2にはSelectパラメーターがあり、サンプルページのロードはデータバインドされていないListBoxコントロールにバインドされています。リストボックスには何が入っていますか?ODS2に渡されるPersonIDパラメーターで何が渡されますか?

質問への回答を開始する最も明白な方法は、PersonDBのGetPersonメソッドにブレークポイントを設定し、パラメーターとして渡されているものを確認することです。次に、コードに従って、何が取得されるかを確認します。

于 2009-11-22T17:39:20.013 に答える