【问题标题】:Gridview ObjectDataSource fill through stored procedureGridview ObjectDataSource 通过存储过程填充
【发布时间】:2015-01-25 23:20:10
【问题描述】:

我有这个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>

【问题讨论】:

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


    【解决方案1】:

    我弄错了。我在Grid View 上使用了PagingSorting,在没有手动实现的情况下使用ObjectDataSource 时两者都不支持。在尝试了其他方法(例如使用&lt;asp:Button&gt; 来获取DataSource 和使用DataBind())后,我注意到了。这抛出了一个 exception 应用程序之前没有抛出。我将使用 GridView 代码更新我的问题以获得更好的可视化效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2010-12-28
      相关资源
      最近更新 更多