Gridview ObjectDataSource填充存储过程

时间:2015-01-25 23:20:10

标签: c# asp.net stored-procedures gridview objectdatasource

我有ObjectDataSource

<asp:ObjectDataSource 
     ID="oDataSourceHistoricoDoencasCliente" runat="server" 
     DeleteMethod="DeleteById" 
     InsertMethod="Insert" 
     SelectMethod="SelectByIdCliente" 
     TypeName="SOSSemTempo.BusinessObjects.Pessoa.HistoricoDoencasCliente">
     <DeleteParameters>
         <asp:Parameter Name="Id" Type="Int32" />
     </DeleteParameters>
     <InsertParameters>
         <asp:Parameter Name="IdCliente" Type="Int32" />
         <asp:Parameter Name="IdDoenca" Type="Int32" />
     </InsertParameters>
     <SelectParameters>
         <asp:QueryStringParameter Name="IdCliente" QueryStringField="Id" Type="Int32" DefaultValue="NULL" />
     </SelectParameters>
     <UpdateParameters>
         <asp:Parameter Name="Id" Type="Int32" />
         <asp:Parameter Name="IdDoenca" Type="Int32" />
     </UpdateParameters>
</asp:ObjectDataSource>

我正在尝试使用SelectMethod SelectByIdCliente从存储过程接收数据。但是当页面加载时,会调用该方法(我使用了断点来检查),并且该方法返回带有预期行的DataReader,但在执行该方法后,网格显示为空。

这是SelectByIdCliente方法:

public SqlDataReader SelectByIdCliente(int IdCliente)
{
        return Database.ExecuteStoredProcedureDataReader("sprSelectHistoricoDoencaCliente", new string[] { "IdCliente" }, new object[] { IdCliente });
}

public static SqlDataReader ExecuteStoredProcedureDataReader(string strStoredProcedureName, string[] strParameters, object[] oValues)
{
    return GetSqlCommand(strStoredProcedureName, strParameters, oValues).ExecuteReader(CommandBehavior.CloseConnection);
}

private static SqlCommand GetSqlCommand(string strStoredProcedureName, string[] strParameters, object[] oValues)
{
        if (strParameters.Length != oValues.Length)
            throw new Exception("Numero de parametros e valores não batem.");

        SqlConnection conn = Database.GetConnection();
        conn.Open();

        SqlCommand cmd = new SqlCommand(strStoredProcedureName, conn);
        cmd.CommandType = CommandType.StoredProcedure;

        for (int i = 0; i < strParameters.Length; i++)
        {
            cmd.Parameters.AddWithValue(strParameters[i], oValues[i]);
        }

        return cmd;
    }

有谁知道我错过了什么?

更新:使用GridView

ObjectDataSource
<asp:GridView 
    ID="gvHistoricoDoencaCliente" 
    runat="server" 
    AllowPaging="True" 
    AllowSorting="true"
    DataSourceID="oDataSourceHistoricoDoencasCliente" 
    EmptyDataText="Não há registros de histórico de doença para este cliente." 
    ShowFooter="True">
</asp:GridView>

1 个答案:

答案 0 :(得分:0)

我弄错了。我在Paging上使用SortingGrid View,在没有手动实施的情况下使用ObjectDataSource时都不支持。在尝试使用<asp:Button>获取DataSource并使用DataBind()等其他方式后,我注意到了。这引发了exception应用程序之前没有抛出的内容。我将使用GridView代码更新我的问题,以便更好地进行可视化。

相关问题