2016-05-05 3 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 оператор выбора не показывая ничего

Я хочу создать GridView, отображающий все записи внутри MatchStatistics. Для этого мне нужно собрать Team_name из таблицы Team. Однако даже когда MatchStatistics имеет данные, оператор выбора не работает. Что с этим не так?

Мое предназначение GridView должно содержать все содержимое MatchStatistics с идентификаторами команды «Дома» и «Без полетов», замененными их Team_names. Аналогично ниже, но с dropdownlists вместо дома и в гостевой команде.

enter image description here

+0

Ваш INNER JOIN кажется немного подозрительным. Он работает, если вы удалите часть 'AND MatchStatistics.Away_team_ID = Team.Team_ID'? Попробуйте запустить ваш запрос в студии управления SQL, чтобы проверить его, прежде чем вводить его в свой код. Кроме того, что означает, что оператор select не работает? вы получаете ошибки? – zgood

+0

Он работает, если я удаляю 'AND MatchStatistics.Away_team_ID = Team.Team_ID', так что мне нужно только одно из этих значений или и то, и другое? Вышеуказанный оператор select не возвращает записей. Я бы не хотел отображать идентификаторы в таблице, а не их имена. –

+0

Мне кажется, что проблема заключается в строке под названием «Team_name», которая будет в объединенной таблице несколько раз, так как вы дважды присоединяетесь к одной и той же таблице, поэтому GridView не будет знать, какой из них показывать. Возможно, это поможет [«Как лучше всего присоединиться к одной таблице дважды»] (http://stackoverflow.com/questions/4267929/whats-the-best-way-to-join-on-the-same- таблица-дважды) – chmodder

ответ

0

Я думаю, что вы хотите использовать ИЛИ:

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

Как это, вы ожидаете команду, чтобы соответствовать дома и в гостях, я думаю, что вы хотите найти любой дом или прочь команды.

+0

Теперь я получаю 2 строки для каждого 'Match_ID' с' 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 то, что я собираюсь сделать. Может быть, просто у меня возникли трудности с установкой моего раскрывающегося списка, чтобы выбрать список команд и установить его как идентификатор домашней команды или идентификатор команды в зависимости от столбца. –

+0

Позвольте мне посмотреть, правильно ли я понял. Вы не хотите показывать идентификатор, но вместо этого вы хотите, чтобы имена команд отображались? Если это так, попробуйте добавить '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, которые отображают список всех имен команд. Значение, которое должно быть внутри них, должно быть идентификатором команды, который заменяет идентификаторы команд внутри дома и в случае необходимости их изменения. Возможно ли это с помощью этого оператора select? Я возвращаюсь. 'DropDownList6' имеет SelectedValue, который является недопустимым, потому что он не существует в списке элементов. Имя параметра: значение 'при попытке привязать его к' Team_ID' –

Смежные вопросы