2009-11-17 32 views
5

Tengo una situación realmente extraña. He creado una nueva página aspx, y sin utilizar CUALQUIER objeto lógico personalizado (todo lo creado con asistentes de estudios visuales) intenté crear una vista de cuadrícula desde sqldatasource.gridview vacío aunque el sqldatasource tiene valores

Los datos provienen del procedimiento almacenado, con un solo parámetro que tiene un valor predeterminado. cuando actualizo el esquema o hago clic en "consulta de prueba", veo que las filas de resultados y los campos de GridViews se crean correctamente. Pero cuando ejecuto la página no hay vista de cuadrícula (simplemente está vacía, cuando agrego EmptyDataTemplate se muestra). Agregué funciones personalizadas (vacías) y eventos DataBind, DataBinded y RowCreted, y solo se activan los eventos databind y datavound (aunque, como escribí, el procedimiento almacenado con su parámetro predeterminado devuelve filas y .net puede leerlos en modo de diseño)

No hay nada "elegante" en el procedimiento, lo he hecho más de una vez sin ningún problema. He intentado otros trabajos wich procedimiento almacenado en nuestra env producción y todavía tengo el mismo gridview emty

Este es el código

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TEST.aspx.cs" Inherits="site.TEST" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
      AllowSorting="True" OnDataBinding="GridView1_DataBinding" OnDataBound="GridView1_DataBound" 
      OnRowCreated="GridView1_RowCreated"> 
      <EmptyDataTemplate> 
       No Data Available 
      </EmptyDataTemplate> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>" 
      SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:Parameter DefaultValue="val1" Name="par1" Type="String" /> 
       <asp:Parameter Name="val2" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
    </div> 
    </form> 
</body> 
</html> 

y el código subyacente

using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

namespace site 
{ 
    public partial class TEST : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     {//brake here 

     } 

     protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
     {//brake here 

     } 

     protected void GridView1_DataBinding(object sender, EventArgs e) 
     {//brake here 

     } 

     protected void GridView1_DataBound(object sender, EventArgs e) 
     {//brake here 

     } 
    } 
} 

Respuesta

13

De sus recientes comentarios Parece como si el Analizador de SQL no se muestra ninguna actividad cuando el SelectCommand se emite desde el SqlDataSource. Esto podría deberse al hecho de que ConvertEmptyStringToNull está configurado como verdadero de forma predeterminada en los Parámetros contenidos en la colección SelectParameters. Además, de forma predeterminada, el CancelSelectOnNullParameter en el SqlDataSource se establece en verdadero. Esto significa que su parámetro 'val2' probablemente esté pasando un valor NULL, que a su vez cancela la operación de recuperación de datos. Es por eso que no ve ninguna actividad dentro de SQL Profiler.

Pruebe la configuración CancelSelectOnNullParameter en falso en el SqlDataSource.

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ConnectionStrings:myConnectionString %>" SelectCommand="myStoredProcedure"SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>

+1

No te puedes imaginar lo agradecido que estoy :) – SimSimY

+0

+1 ¡Me salvaste un par de horas! :) – meda

+1

Gracias. 6 años después, me ayudaste :-) No estoy seguro de por qué MS hace eso por defecto para crear desorden. –

0

no he ver asignación de parámetros (val1, val2), por lo que el inicio predeterminado asignará valores predeterminados para cadena e int y pasará al servidor SQL.

Trate de SQL Server para ver si se ejecuta la selección con parámetros reales

+0

parametros son Passas que deberían (con valor predeterminado en la primera y sin valor (tiene valor por defecto en el procedimiento almacenado en sí) Parece que no hay conexión a la base de datos (la profiler no mostró el Evento BatchStarting, pero cuando ejecuté el procedimiento desde el estudio managamnet, apareció) – SimSimY

Cuestiones relacionadas