2016-05-03 14 views
0
SELECT 
    LeagueTable.P, 
    LeagueTable.W, 
    LeagueTable.D, 
    LeagueTable.L, 
    LeagueTable.GF, 
    LeagueTable.GA, 
    LeagueTable.GD, 
    LeagueTable.Pts, 
    Team.Team_name, 
    LeagueTable.Team_ID 
FROM LeagueTable 
INNER JOIN Team 
    ON LeagueTable.Team_ID = Team.Team_ID 

enter image description hereBenutzerdefinierte SQL-Select-Anweisung keine Daten in Gridview-Anzeige

ich den Benutzer habe beim Start einen Teamnamen eingeben, die in die Team Tabelle eingetragen, die mit einem Liga auf eine Webseite umleitet Tabelle. Die Ligatabelle enthält anfänglich keine Daten, sollte jedoch eine Zeile mit den Benutzereingaben anzeigen, sobald der Benutzer auf diese Seite gelangt ist.

Diese Abfrage zeigt jedoch die GridView als leer. Was stimmt damit nicht?

asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" EmptyDataText="No teams entered into the table."> 
     <Columns> 
      <asp:BoundField DataField="P" HeaderText="P" SortExpression="P" /> 
      <asp:BoundField DataField="W" HeaderText="W" SortExpression="W" /> 
      <asp:BoundField DataField="D" HeaderText="D" SortExpression="D" /> 
      <asp:BoundField DataField="L" HeaderText="L" SortExpression="L" /> 
      <asp:BoundField DataField="GF" HeaderText="GF" SortExpression="GF" /> 
      <asp:BoundField DataField="GA" HeaderText="GA" SortExpression="GA" /> 
      <asp:BoundField DataField="GD" HeaderText="GD" SortExpression="GD" /> 
      <asp:BoundField DataField="Pts" HeaderText="Pts" SortExpression="Pts" /> 
      <asp:BoundField DataField="Team_name" HeaderText="Team_name" SortExpression="Team_name" /> 
      <asp:BoundField DataField="Team_ID" HeaderText="Team_ID" SortExpression="Team_ID" /> 
     </Columns> 
    </asp:GridView> 

      protected void NewTeamBtn_Click(object sender, EventArgs e) 
{   
    string qry1 = "INSERT into Team (Team_name) VALUES (@Team_name)"; 
    using (SqlCommand cmd = new SqlCommand(qry1, con)) 
    { 
     cmd.Parameters.Add(("@Team_name"), SqlDbType.VarChar).Value = NewTeamTxtBox.Text; 
     cmd.CommandType = CommandType.Text; 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 
    Response.Redirect("EnterData.aspx"); 
} 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SportsData2ConnectionString %>" SelectCommand="SELECT LeagueTable.League_ID, LeagueTable.Team_ID, LeagueTable.P, LeagueTable.W, LeagueTable.D, LeagueTable.L, LeagueTable.GF, LeagueTable.GA, LeagueTable.GD, LeagueTable.Pts, Team.Team_name FROM LeagueTable INNER JOIN Team ON LeagueTable.Team_ID = Team.Team_ID"></asp:SqlDataSource> 
+0

Wie rufen Sie die Abfrage? Und wie setzt man das Ergebnis in die Gridview? –

+0

Können Sie uns den Datenbindungscode zeigen? – Ismael

+0

Ich habe es auf eine benutzerdefinierte SQL Select-Abfrage in einer SQL-Datenquelle festgelegt. Ich habe meine GridView an die ursprüngliche Frage angehängt. –

Antwort

1

Basierend auf Ihre Kommentare es scheint, dass Sie Daten in Ihren Team-Tabelle einfügen, kann aber, wenn Sie die select-Anweisung führen Sie in Ihrer SQL-Datenquelle haben, werden Sie feststellen, eine Inner Join haben. Das Inner Join bedeutet, dass keine Ergebnisse zurückgegeben werden, wenn sich die Team-ID nicht in einer der beiden Tabellen befindet, denen Sie beitreten.

Ich sehe Ihren SQL-Quellcode nicht, aber ein weiterer möglicher Fehlerpunkt ist die TeamID, die Sie an dieses Steuerelement übergeben. Es gibt 3 Fragen, die mir in den Sinn kommen, um sicherzustellen, dass Sie gültige Daten erhalten.

1) Wo bekommen Sie es her?

2) Ist es gültig und in beiden Tabellen?

3) Binden Sie die Gridview erneut, nachdem Sie diesen Wert festgelegt haben?

bearbeiten

Was Sie wollen, dass alle Ihre Fragen an dieser Stelle nicht tun, nicht entsprechen. Sie sollten Ihren Titel und Ihre Frage bearbeiten.

Ich würde so etwas für Ihren Einsatz verwenden.

DECLARE @TeamID as INT 
INSERT into Team (Team_name) VALUES (@Team_name) 

SELECT @TeamID = SCOPE_IDENTITY(); 

INSERT into LeagueTable Team_ID VALUES @TeamID 

wird dieser Beitrag Scope_Identity vs @@Identity

this Stapel Frage helfen helfen.

+0

Ich habe die SQL-Datenquelle für Sie hinzugefügt. 'Team_ID' ist in beiden Tabellen und ich kann' GridView1.DataBind(); 'nicht anwenden, da diese Schaltfläche zu einer anderen Seite führt. –

+0

Es funktioniert! Erforderlich, um die Syntax für die letzte Zeile zu 'INSERT in (LeagueTable) Team_ID VALUES (@TeamID)' zu ändern und dann 'League_ID' in IsIdentity = on zu ändern. Allerdings bekomme ich jetzt jede Zeile mit einer anderen 'League_ID'. Ist dies für spätere Abfragen relevant, die diese Tabelle verwenden? Ich möchte nicht, dass Teams durch verschiedene Ligen getrennt sind, ich benutze es nur als Primärschlüssel. –

+0

Sie haben eine 1 zu viele Beziehung zwischen den Tabellen - aber Ihr Kommentar klingt wie es keinen Grund gibt, die 2 Tabellen getrennt zu haben. Warum haben Sie eine separate Tabelle nur für den Teamnamen? Vielleicht möchten Sie sie zu einer einzigen Tabelle kombinieren. –

Verwandte Themen