2009-11-17 3 views
5

J'ai la situation vraiment bizarre. J'ai créé une nouvelle page ASPX, et sans utiliser aucun objet logique personnalisé (tout ce qui a été créé avec les assistants Visual Studios) a essayé de créer une vue de grille depuis sqldatasource.gridview vide bien que le sqldatasource a des valeurs

Les données proviennent d'une procédure stockée, avec un seul paramètre qui a une valeur par défaut. lorsque je rafraîchis le schéma ou que je clique sur "tester la requête", je vois que les lignes de résultats et les champs GridViews sont créés de manière cor- recte. Mais quand je cours la page il n'y a aucune vue de grille (c'est simplement vide - quand j'ajoute EmptyDataTemplate il est montré). J'ai ajouté la fonction personnalisée (vide) et l'événement DataBind, DataBinded et RowCreted, et seuls les événements databind et datavound sont lancés (bien que, comme je l'ai écrit, la procédure stockée avec son paramètre par défaut return rows et .net peut les lire en mode design

Il n'y a rien de "fantaisie" dans la procédure, je l'ai fait plus d'une fois sans problème. Je l'ai essayé une autre procédure stockée Wich travaux dans notre production et env encore eu la même emty gridview

Voici le code

<%@ 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> 

et codebehind

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 

     } 
    } 
} 

Répondre

13

De vos commentaires récents, il semble que SQL Profiler ne montre aucune activité lorsque le SelectCommand est émis à partir du SqlDataSource. Cela peut être dû au fait que ConvertEmptyStringToNull est défini sur true par défaut sur les paramètres contenus dans la collection SelectParameters. En outre, par défaut, le CancelSelectOnNullParameter sur le SqlDataSource est défini sur true. Cela signifie que votre paramètre 'val2' transmet probablement une valeur NULL, ce qui à son tour annule l'opération de récupération de données. C'est pourquoi vous ne voyez aucune activité dans SQL Profiler. Essayez de définir CancelSelectOnNullParameter sur false sur SqlDataSource.

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

+1

Vous ne pouvez pas imaginer comment je suis reconnaissant :) – SimSimY

+0

+1 Vous venez de me sauver quelques heures! :) – meda

+1

Merci. 6 ans plus tard, vous m'avez aidé :-) Je ne sais pas pourquoi MS fait cette chose par défaut pour créer le désordre. –

0

Je vois pas l'assignation des paramètres (val1, val2), donc le lancement par défaut assignera la valeur par défaut pour string et int et passera au serveur SQL.

Essayez SQL Server Profiler pour voir si vous exécutez la sélection avec les paramètres REAL

+0

Paramters sont Passas ils devraient (avec une valeur par défaut sur la première et aucune valeur (a une valeur par défaut dans la procédure stockée lui-même) On dirait qu'il n'y a aucune connexion à la DB (la profiler n'a pas montré l'événement BatchStarting, mais quand j'ai exécuté la procédure depuis le studio managamnet - il est apparu) – SimSimY

Questions connexes