2009-11-17 18 views
5

Ich habe wirklich seltsame Situation. Ich habe neue Aspx-Seite erstellt, und ohne ANY benutzerdefinierte Logikobjekte (alles mit Visual Studio-Assistenten erstellt) versucht, Rasteransicht von sqldatasource zu erstellen.leere gridview obwohl die sqldatasource Werte hat

Die Daten stammen aus der gespeicherten Prozedur, wobei ein einzelner Parameter den Standardwert hat. Wenn ich das Schema aktualisiere oder auf "Testabfrage" klicke, werden Ergebniszeilen und GridViews-Felder korrekt erstellt. Aber wenn ich die Seite ausführe, gibt es keine Rasteransicht (es ist einfach leer - wenn ich EmptyDataTemplate hinzufüge, wird es angezeigt). Ich habe benutzerdefinierte (leere) Funktion und DataBind, DataBinded und RowCreted-Ereignis hinzugefügt, und nur Databind und DataVound-Ereignisse ausgelöst (obwohl, wie ich schrieb - die gespeicherte Prozedur mit dem Standardparameter Zeilen und .net können sie im Entwurfsmodus lesen)

Es gibt nichts "Phantasie" in der Prozedur, ich habe dies mehr als einmal ohne Probleme getan. Ich habe eine andere gespeicherte Prozedur Weicht Werke in unserer Produktion env versucht und immer noch den gleichen emty gridview

hier ist der 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> 

und der Code-Behind

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 

     } 
    } 
} 

Antwort

13

aus Ihrer jüngsten Kommentare ausführen es sieht aus, als ob SQL Profiler wird keine Aktivität zeigt, wenn die SelectCommand vom SqlDataSource ausgegeben wird. Dies kann darauf zurückzuführen sein, dass ConvertEmptyStringToNull standardmäßig auf Parameter in der SelectParameters-Sammlung festgelegt ist. Außerdem wird CancelSelectOnNullParameter für die SqlDataSource standardmäßig auf True festgelegt. Dies bedeutet, dass Ihr Parameter 'val2' wahrscheinlich einen NULL-Wert übergibt, der wiederum den Datenabrufvorgang abbricht. Aus diesem Grund sehen Sie keine Aktivität in SQL Profiler.

Versuchen Sie CancelSelectOnNullParameter auf false auf SqlDataSource.

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

+1

Sie können sich nicht vorstellen, wie dankbar ich bin :) – SimSimY

+0

+1 Sie haben mir gerade ein paar Stunden gerettet! :) – meda

+1

Danke. 6 Jahre später, hast du mir geholfen :-) Nicht sicher, warum MS diese Vor-Ort-Sache zu Chaos macht. –

0

Ich habe nicht sehen Zuweisung von Parametern (val1, val2), so dass der Standardstart den Standard für string und int zuweist und an den SQL-Server übergibt.

Versuchen Sie SQL Server Profiler, um zu sehen, wenn Sie die Auswahl mit REAL Parameter

+0

Paramter sind Passas sollten sie (mit Standardwert auf dem ersten und keinen Wert (hat Standardwert in der gespeicherten Prozedur selbst) Es sieht aus wie es keine Verbindung zum DB (die Profiler zeigte das BatchStarting Event nicht, aber als ich das Verfahren vom Managamnet Studio aus ausführte - – SimSimY

Verwandte Themen