2016-05-05 111 views
1
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="Match_ID" DataSourceID="SqlDataSource4"> 
      <Columns> 
       <asp:BoundField DataField="Team_name" HeaderText="Team_name" SortExpression="Team_name" /> 
       <asp:BoundField DataField="Match_ID" HeaderText="Match_ID" InsertVisible="False" ReadOnly="True" SortExpression="Match_ID" /> 
       <asp:BoundField DataField="Home_team_ID" HeaderText="Home_team_ID" SortExpression="Home_team_ID" /> 
       <asp:BoundField DataField="Away_team_ID" HeaderText="Away_team_ID" SortExpression="Away_team_ID" /> 
       <asp:BoundField DataField="Home_team_score" HeaderText="Home_team_score" SortExpression="Home_team_score" /> 
       <asp:BoundField DataField="Away_team_score" HeaderText="Away_team_score" SortExpression="Away_team_score" /> 
       <asp:BoundField DataField="Game_date" HeaderText="Game_date" SortExpression="Game_date" /> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:SportsData2ConnectionString %>" SelectCommand="SELECT Team.Team_name, MatchStatistics.Match_ID, MatchStatistics.Home_team_ID, MatchStatistics.Away_team_ID, MatchStatistics.Home_team_score, MatchStatistics.Away_team_score, MatchStatistics.Game_date FROM MatchStatistics INNER JOIN Team ON MatchStatistics.Home_team_ID = Team.Team_ID AND MatchStatistics.Away_team_ID = Team.Team_ID ORDER BY MatchStatistics.Game_date DESC"></asp:SqlDataSource> 

enter image description hereGridView的select语句不显示任何

我想创建一个GridView显示内MatchStatistics所有记录。为此,我需要从Team表中收集Team_name。但是,即使MatchStatistics有数据,select语句也不起作用。它出什么问题了?

我的预期GridView应该是MatchStatistics的所有内容,主客场球队ID由Team_names替代。与以下类似,但是用dropdownlists代替主队和客队ID。

enter image description here

+0

你的INNER JOIN似乎有点可疑。如果您删除了AND AND MatchStatistics.Away_team_ID = Team.Team_ID'部分,它会起作用吗?尝试在SQL管理工作室中运行您的查询,然后将其放入代码中进行测试。另外,_ select语句不工作_是什么意思?你有错误吗? – zgood

+0

它工作,如果我删除'AND MatchStatistics.Away_team_ID = Team.Team_ID'所以我只需要这些值或两者之一?我发布的select语句不返回任何记录。我想不在表格中显示ID,而不是他们的名字。 –

+0

在我看来,问题在于名为'Team_name'的行,它将在连接表中多次显示,因为您正在连接同一个表,因此GridView无法知道要显示哪个表。也许这将有助于[“两次加入同一个表的最佳方式”](http://stackoverflow.com/questions/4267929/whats-the-best-way-to-join-on-the-same-表两次) – chmodder

回答

0

我想你想使用OR:

FROM MatchStatistics 
INNER JOIN Team 
ON MatchStatistics.Home_team_ID = Team.Team_ID 
**OR** MatchStatistics.Away_team_ID = Team.Team_ID 

正因为如此,你期待的球队相匹配的主场和客场,我想你想找到任何家庭或离开团队。

+0

现在我为每个'Match_ID'获得2行,其中'Team_ID'和'Team_name'每个都是不同的。我只想为每场比赛列出1排 –

+0

是的,但是您尝试匹配哪支球队,主队或客队,还是用户选择的球队? –

+0

我正在考虑@ chmodder的解决方案,您真正在寻找什么。 –

0

尝试此查询:

SELECT 
    t1.Team_name AS Home_Team_Name, 
    t2.Team_name AS Away_Team_Name, 
    m.Match_ID, 
    m.Home_team_score, 
    m.Away_team_score, 
    m.Game_date 
FROM MatchStatistics m 
INNER JOIN Team t1 ON t1.Team_ID = m.Home_team_ID 
INNER JOIN Team t2 ON t2.Team_ID = m.Away_team_ID 
ORDER BY m.Game_date DESC 

这应该给你teamnames而不是teamId的。

记得删除GridView中第一列和更新的数据域和SortExpressions从查询匹配新的列名:

  • Match_ID
  • Home_Team_Name
  • Away_Team_Name
  • Home_team_score
  • Away_team_score
  • Game_date

您还可以检查我制作的sqlfiddle (MySQL)来测试它。只要知道我在小提琴中使用了一些稍微不同的列名称,如果你觉得需要从中拷贝一些东西。

+0

这更接近我想要但不完全。我已经在OP中张贴了我正在做的事情。这可能是因为我很难设置我的下拉列表来选择球队列表,并根据列将其设置为主队ID或客队ID。 –

+0

让我看看我是否正确。你不想让Id显示,而是想显示队名?如果是这种情况,尝试添加'SELECT t1.Team_name AS Home_teamname,t2.Team_name AS Away_teamname .....'而不是'SELECT t1.team_name AS Home_team_name,m.Home_team_id,m.Away_team_ID'并查看会发生什么。 – chmodder

+0

太棒了,它的作品!但是,编辑时我想让两个主客场球队列表DropDownLists显示所有球队名称的列表。在他们内部的价值应该是团队ID,如果他们需要改变,他们可以在主场和客场之内取代球队ID。这个select语句甚至有可能吗?我回来了''DropDownList6'有一个无效的SelectedValue,因为它不存在于项目列表中。 参数名称:数值绑定到'Team_ID'时的值' –