【问题标题】:Why does ObjectDataSource.DataBind() return rows, while ObjectDataSource.Select() doesn't?为什么 ObjectDataSource.DataBind() 返回行,而 ObjectDataSource.Select() 不返回?
【发布时间】:2009-11-22 17:32:22
【问题描述】:

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


谢谢

编辑:

假设用户在 Listbox 中选择一个项目 --> 似乎当我们调用 ODS2.Select() 时,ODS2 出于某种原因无法绑定到 ListBox1.SelectedValue 并从该属性中提取值

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 第一次创建页面时,DetailsView 不会显示任何结果,但是当用户在 ListBox 中选择一个项目时,ODS2 应该(在调用 ODS2.DataBind() 时也是如此)返回结果。
    • 在列表框中没有选择的情况下如何处理?首次加载时可能就是这种情况。
    • 是的,第一次加载时 DetailsView 不显示任何内容,但在回发时它应该显示,即使我们调用 ODS2.Select(假设用户在 ListBox 中选择一个项目)
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2016-11-20
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多