为什么ObjectDataSource.DataBind()返回行,而ObjectDataSource.Select()没有?

时间:2009-11-22 17:32:22

标签: c# asp.net data-binding ado.net objectdatasource

我认为调用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(); 呢?


谢谢

修改

假设用户选择列表框中的项目 - &gt;看来当我们调用ODS2.Select()时,ODS2由于某种原因无法绑定到ListBox1.SelectedValue并从此属性中提取值

1 个答案:

答案 0 :(得分:1)

ODS2有一个Select参数,它在您的示例页面加载中绑定到一个尚未数据绑定的ListBox控件。 ListBox中有什么?在传递给ODS2的PersonID参数中传递了什么?

开始回答问题最明显的方法是在PersonDB的GetPerson方法中设置断点,并查看作为参数传递的内容。然后按照代码查看检索到的内容。